Autor Beitrag
mtin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 177

Win XP SP2
BDS2006 Enterprise
BeitragVerfasst: Do 30.06.05 20:55 
also, ich habe versucht 2 programme zu schreiben, eins als clienten mit nem clientsocket und der server mit nem serversocket.
Der client sendet in regelmäßigen abständen strings an den server. Dieser sollte wiederum diese strings an alle zu ihm verbundenen clients schicken.
Im Serverfenster kommen die strings des clienten an, ich habe sie über ein Memo ausgeben lassen. Allerdings scheint der Server sie nich wieder an die clients zu schicken, bei denen kommt nämlich nichts mehr an....

Hier is erstmal der Client Code:

Aktivierung des ClientSockets
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
procedure TForm1.Button1Click(Sender: TObject);
begin
Button1.Caption:='Connecting...';
ClientSocket1.Host:=Edit1.Text;
ClientSocket1.Open;
end;

Senden der Strings
ausblenden Delphi-Quelltext
1:
ClientSocket1.Socket.SendText(sx);					

Code für das Empfangen der Strings:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
procedure TForm1.ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
var text:string;
begin
text:=socket.receivetext;
MEmo1.Lines.Add(socket.receivetext);

end;


Hier jetzt der Server-Code:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
  var i:integer;
begin
Memo1.Lines.Add(socket.receivetext);
  For I := 0 to ServerSocket1.Socket.ActiveConnections-1 do
  begin with ServerSocket1.Socket.Connections [I] do
  if (Connected) then SendText(socket.receivetext); end;

end;


ich glaube der Fehler liegt irgendwo im markierten bereich, hab aber eigentlich keine Ahnung warum das nich klappt!
wär nett wenn jemand mir auf die sprünge helfen könnte.....
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10185
Erhaltene Danke: 1261

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Do 30.06.05 22:20 
Moin!

Probier das mal:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
procedure TForm1.ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket);
  var
    i: Integer;
    msg: String;
begin
  msg := Socket.ReceiveText;
  Memo1.Lines.Add(msg);
  for i := 0 to ServerSocket1.Socket.ActiveConnections-1 do
    with ServerSocket1.Socket.Connections[i] do
      if (Connected) then
        SendText(msg);
end;

Fehler: Du mußt den Text zwischenspeichern, sonst ist er weg und es wird ein Leerstring "gesendet"... :wink:

cu
Narses
mtin Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 177

Win XP SP2
BDS2006 Enterprise
BeitragVerfasst: Do 30.06.05 22:30 
hmm danke für die antwort,
aber es geht immer noch nich!
es kommt immer mal ne neue leerzeile in dem memo am client an, allerdings viel weniger als das was erstmal an den server gesendet wird und eben auch nur leerzeilen, nich die strings....

hab mal im server nen button gemacht un das als code geschrieben
ausblenden Delphi-Quelltext
1:
2:
3:
4:
procedure TForm1.Button2Click(Sender: TObject);
begin
ServerSocket1.Socket.Connections[0].SendText('arg warum geht das nich');
end;

Das müsste ja jetzte eigenltich 100%ig ankommen, oder?
weil am client wieder maximal ne leerzeile ankommt...
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10185
Erhaltene Danke: 1261

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Do 30.06.05 22:36 
Moin!

Du mußt natürlich eine Schleife über alle Connections laufen lassen, nicht nur 0. Oder meinst du, dass bei .Connection[0] nicht der gesendete Text ankommt?

cu
Narses
mtin Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 177

Win XP SP2
BDS2006 Enterprise
BeitragVerfasst: Fr 01.07.05 14:39 
na im richtigen programmteil hab ich ja die schleife, der button war nur so zum austesten...

aber müsste das nich trotzdem gehen? die 0 is doch der erste client oder?

egal kann ich dir mal meinen source schicken? vielleicht siehst du ja dann den fehler...is auch nich viel, bin halt gleich am anfang steckengeblieben :(
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10185
Erhaltene Danke: 1261

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Fr 01.07.05 17:13 
Moin!

user profile iconmtin hat folgendes geschrieben:
egal kann ich dir mal meinen source schicken? vielleicht siehst du ja dann den fehler...

OK, pack hier in den Anhang, ich seh mal rein.

cu
Narses
mtin Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 177

Win XP SP2
BDS2006 Enterprise
BeitragVerfasst: Fr 01.07.05 20:08 
ok, ich hoffe du siehst durch, is ohne kommentare...
also im moment sollte es immer nacheinander die x und y werte der mausposition senden, sobald man die maustaste drückt bzw. gedrückt hält..
Einloggen, um Attachments anzusehen!
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10185
Erhaltene Danke: 1261

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Fr 01.07.05 21:21 
Moin!

So, hier die laufende Version. Dein Fehler war der gleiche, wie im Server: mehrfacher Aufruf der .RecieveText-Methode, statt eine Buffer-Variable zu verwenden. Ausserdem solltest du für eigene Protokolle Portnummern ab 1024 verwenden, deshalb habe ich die Portangabe in den Kompos auf 5000 gestellt.

Weiterhin ist der nonblocking-Mode der Sockets nicht wirklich gut geeignet für das, was du da vor hast. Das wird später "zu langsam". Aber blocking-calls heißt natürlich: Threads!

Ausserdem solltest du dir schonmal ein Protokoll ausdenken, so wirst du sonst auf Dauer auch noch in eine Falle laufen. :wink:

cu
Narses
Einloggen, um Attachments anzusehen!