Autor Beitrag
5etH88
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Fr 12.12.08 10:11 
Hallo Zusammen,

ich schreibe momentan an einem Lan-Chat das ganze funktioniert auch soweit bis auf eine kleinigkeit...

Wenn ich eine Nachricht schicke, kommt die erste nicht an Bzw. wird nicht im
Memo gepostet sondern erst die 2. erscheint dann im Memo. Hier die Entsprechenden Quellcode Zeilen die ich Programmiert habe Kommentare sind vorhanden:
Main: Hier ist der ServerSocket

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
var da      : boolean;
    i,temp  : Integer;
    SL      : tStringlist;
begin
da := false; //Variable zum überprüfen ob mit der Person schon geschrieben wird
temp := 0;
sl := tstringlist.create;
for I := 0 to stringgrid3.RowCount - 1 do //in SG3 stehen alle mit denen ich Schreibe
  begin
   if stringgrid3.Cells[0,i] = socket.Remoteaddress then
    begin
      da := true;
      temp := StrToInt(stringgrid3.cells[1,i]); //SG3 2.spalte Formlist index
    end;
  end;
    if da = true then
     begin
       TForm11( FormList[ temp ] ).Memo1.Lines.Add( Socket.ReceiveText ); //Das funktioniert ohne probleme text kommt wunderbar an

     end
     else
     begin
       //Erstes Erzeugen Chatfenster
       sl.Delimiter := ':';
       sl.DelimitedText := socket.ReceiveText; // Erforderlich um Absender zu Ermitteln
       formlist.add(Tform11.Create(application)); // Chatfenster erzeugen
       stringgrid3.Cells[0,stringgrid3.RowCount-1] := socket.Remoteaddress;
       TForm11( FormList[formlist.Count-1] ).clientsocket1.Host := socket.RemoteHost;
       TForm11( FormList[ formlist.count-1 ] ).clientsocket1.Active := true;
       stringgrid3.Cells[1,stringgrid3.RowCount-1] := IntToStr(formlist.Count-1);
       stringgrid3.RowCount := stringgrid3.RowCount +1;
       TForm11( FormList[ formlist.count-1 ] ).caption := 'Chat mit ' + sl[0];
       TForm11( FormList[ formlist.count-1 ] ).index := formlist.count -1;
       TForm11( FormList[ formlist.count-1 ] ).show;
       TForm11( FormList[ formlist.count-1 ] ).Memo1.Lines.Add( Socket.ReceiveText );

  //Hier ist der Fehler er postet es nicht in das Memo, obwohl Socket.receivetext nicht leer ist

     end;
  end;
end;
sl.free;
end;


Chatfenster hier ist der Clientsocket

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
//Abschicken der Nachricht
procedure TForm11.Button1Click(Sender: TObject);
begin
if (ClientSocket1.Active=true) and (Edit1.Text<>''then
ClientSocket1.Socket.SendText(form1.edit3.text+': '+Edit1.Text);
memo1.Lines.Add(form1.edit3.text + ': ' + edit1.text);
Edit1.Text:='';
end;

procedure TForm11.FormClose(Sender: TObject; var Action: TCloseAction);
begin
self.Destroy;
end;

//Damit Fenster neu aufgeht nachdem geschlossen und ich wieder angeschrieben werde
procedure TForm11.FormDestroy(Sender: TObject);
var
  I: Integer;
begin
for I := 0 to form1.StringGrid3.RowCount - 1 do
begin
  if inttoStr(index) = (form1.stringgrid3.Cells[1,i]) then
  begin
    griddeleterow(form1.stringgrid3,i);
  end;
end;



ich hoffe ihr könnt mir helfen
ich wäre euch sehr dankbar
Schöne Grüße Manuel

---Moderiert von user profile iconNarses: Beiträge zusammengefasst---

Habe bemerkt das wenn ich einen Statischen Text adde (ins memo) dann postet er ihn auch spricht ich füge jetzt einfach SL.Delimatedtext hinzu und es funktioniert


Moderiert von user profile iconNarses: Topic aus VCL (Visual Component Library) verschoben am Fr 12.12.2008 um 12:56
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Fr 12.12.08 13:01 
Moin!

Wenn ich deinen Code beim Überfliegen richtig gedeutet habe, dann verlässt du dich auf die Ereignisse als Pakettrennung bzw. gehst davon aus, dass zu einem .SendText auch ein .RecieveText gehört. Das ist leider eine falsche Annahme, siehe FAQ-Beitrag. :nixweiss:

Hier ist ein Tutorial, in dem dieses Problem gelöst wird. :idea:

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.