Hallo an alle Netzwerkaffinen.
ich schreibe einen TCP Client, der mit einem Server kommunizieren soll.
Als Vorlage habe ich auch eine fertige Clientapplikation von der ich die gesendeten Telegramme mitgeschnitten habe.
Das Progblem dabei, ich sende zwar etwas, aber bekomme keine richtige Antwort.
Als bzw. wird mir in meinem Programm nichts angezeigt, obwohl vom Server Antworten kommen.
Im Mitschnitt sieht man alleridngs auch Unterschiede:
Das Fertige Gui Programm sendet nach der ersten Servernachricht nochmal ein ACK. Ich nicht und bei dem fertigen Programm sendet der Server auch ein Telegramm mit Finished Flag.
Das kommt bei mir auch nicht.
Die Frage ist jetzt was muss ich verändern damit die Komunikation so aussieht wie im vorgegebenen Programm?
Hier mal mein Sendecode:
Als Komponente nutze ich TTcpClient aus der Kategorie Internet
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:
| procedure TForm1.sendmessage(sendstring: string); var bin: string; i : integer; length_m: integer; begin if Odd(Length(sendstring)) then sendstring := '0'+sendstring; for i := 0 to (Length(sendstring) -1) shr 1 do bin := bin +Chr(StrToInt('$'+Copy(sendstring,(i shl 1) +1,2))); TCPclient1.SendBuf(bin[1],length(bin)); end;
procedure TForm1.get_proj_btnClick(Sender: TObject); var BUFFER, bin: string; i: Integer; receive :string[12]; begin sendmessage(functions.get_gsdversion()+functions.get_free_device()+gsd_get_sdata()); while TcpClient1.WaitForData(800) do begin TcpClient1.ReceiveBuf(receive[1], sizeof(receive)); end; end; |
Im Anhang die Dumps die man mit Wireshark schön anschauen kann
am besten bei Filter tcp.port eq 26000 eintragen dann sieht man den Rest nicht...