![]() |
ClientSocket/ServerSocket und Hamachi
Hallo zusammen,
habe ein Programm geschrieben, welches übers Netzwerk letztendlich nur Stirngs austauscht. Klappt im Netzwerk auch wunderbar, doch wenn ich das ganze versuche über Hamachi (um es übers Internet zu benutzen) ans laufen zu kriegen gibt es Probleme. Client und Server finden und verbinden sich wunderbar miteinander, doch sobald irgendwie eine Nachricht gesendet wird (die im übrigen meistens ein Befehl ist, der intern verarbeitet wird), gibt es eine Zugriffsverletzung der Adresse 00000000 usw. Die Befehle haben in der Regel vier Zeichen als Befehlskennung, die dann vom Client/Server erkannt und weiterverarbeitet weden, sprich, z.B. dass eine Zahlenfolge in ein Array geschrieben wird. Versteht ihr zufällig woran das liegen könnte? Meine Vermutung ist, dass die Befehle evtl nicht komplett übertragen werden. Vielleicht fällt euch ja etwas dazu ein. Vielen Dank im Voraus PS: Hier ein Beispiel wie das bei mir aussieht:
Delphi-Quellcode:
procedure TFrmServer.ServerSocketClientRead (Sender: TObject; Socket: TCustomWinSocket);
var Nachricht: TChatNachricht; I: Integer; l,j,k: integer; dummy: string; randomnumber: integer; blub: string; testzeug: string; packetsize: integer; begin {Nachricht empfangen} Socket.ReceiveBuf (Nachricht, SizeOf(Nachricht)); edit1.text:=nachricht.text; mess:= edit1.Text; if mess[1]+mess[2]+mess[3]+mess[4]+mess[5]+mess[6]+mess[7]='#$§#GCX' then begin mess[1]:=' '; mess[2]:=' '; mess[3]:=' '; mess[4]:=' '; mess[5]:=' '; mess[6]:=' '; mess[7]:=' '; mess:=trim(mess); zahl:=StrToInt(mess); end; |
Re: ClientSocket/ServerSocket und Hamachi
Ich weiß zwar nicht genau, woran es liegt. Aber du könntest mal das Programm "Wippien"
![]() Gruß, Michael |
Re: ClientSocket/ServerSocket und Hamachi
Zitat:
Die Datenhäppchen kommen aber gottseidank ich richtiger Reihenfolge; dafür sorgt das Betriebssystem. Daher muss der Empfang der Daten immer so aussehen:
Delphi-Quellcode:
// dieser Sourcecode ist so vielleicht nicht direkt compilierbar
// er soll nur das Prinzip zeigen procedure TForm1.DataReceivedHandler(Sender:TObject); var command : string; p : integer; begin // empfangene Daten anhängen FReceiverBuffer := FReceiverBuffer + socket.ReceiveText; // Annahme: alle Befehle enden mit CR/LF p := Pos(#13#10, FReceivebuffer); if p <> 0 then begin // Befehl rauskopieren command := Copy(FReceiveBuffer, 1, p-1); // und aus dem Empfangspuffer entfernen FReceiveBuffer := Copy(FReceiveBuffer, p+1, 99999); ParseAndExcuteCommand(command); end; end; |
Re: ClientSocket/ServerSocket und Hamachi
Ah super.
Ist die Prozedur ReceiveHandler Standart oder muss ich die selber definieren? Ebenso FReceiveBuffer... Da weiss ich nicht ganz wie ich das definieren soll. Wäre super wenn du mir da noch was zu sagen könntest. ParseandExecute kenne ich auch nicht :-( sorry für meine Unwissenheit... Achja und wofür steht das #13#10.....? Und was meinst du mit "Alle Befehle enden mit CR/LF"??? |
Re: ClientSocket/ServerSocket und Hamachi
Hmm, also ich habe mir einfach mal die ankommenden Nachrichten ausgeben lassen. Die sind normal vorhanden, auch nicht abgehakt oder so. Dennoch zeigt er mir einen Zugriffsfehler bei der Adresse 0000000 an. Könnte das evtl noch nen anderen Grund haben?
Nur so als Hinweis, ich habe einen Router! Allerdings wird die Verbindung ganz normal hergestellt. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:28 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz