AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi ClientSocket/ServerSocket und Hamachi
Thema durchsuchen
Ansicht
Themen-Optionen

ClientSocket/ServerSocket und Hamachi

Ein Thema von Socke_SG · begonnen am 22. Mär 2009 · letzter Beitrag vom 24. Mär 2009
Antwort Antwort
Socke_SG

Registriert seit: 31. Mär 2008
47 Beiträge
 
#1

ClientSocket/ServerSocket und Hamachi

  Alt 22. Mär 2009, 20:53
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]='#$§#GCXthen begin
    mess[1]:=' ';
    mess[2]:=' ';
    mess[3]:=' ';
    mess[4]:=' ';
    mess[5]:=' ';
    mess[6]:=' ';
    mess[7]:=' ';
    mess:=trim(mess);
    zahl:=StrToInt(mess);
  end;
  Mit Zitat antworten Zitat
Benutzerbild von alleinherrscher
alleinherrscher

Registriert seit: 8. Jul 2004
Ort: Aachen
797 Beiträge
 
Delphi XE2 Professional
 
#2

Re: ClientSocket/ServerSocket und Hamachi

  Alt 23. Mär 2009, 00:54
Ich weiß zwar nicht genau, woran es liegt. Aber du könntest mal das Programm "Wippien" Link testen. Finde ich eig. noch besser als Hamachi, da es ein SDK und eine Mini VPN Applikation gibt. Eigene VPN tunnel kann man damit leider nicht kompilieren, weil die Freeware auf kostenpflichte Komponenten (wodVPN) zurückgreift.

Gruß, Michael
„Software wird schneller langsamer als Hardware schneller wird. “ (Niklaus Wirth, 1995)

Mein Netzwerktool: Lan.FS
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 15. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#3

Re: ClientSocket/ServerSocket und Hamachi

  Alt 23. Mär 2009, 07:28
Zitat von Socke_SG:
Meine Vermutung ist, dass die Befehle evtl nicht komplett übertragen werden.
Richtig, die Daten können in unvorhersagbarer Weise zerstückelt werden.
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;
  Mit Zitat antworten Zitat
Socke_SG

Registriert seit: 31. Mär 2008
47 Beiträge
 
#4

Re: ClientSocket/ServerSocket und Hamachi

  Alt 23. Mär 2009, 21:03
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"???
  Mit Zitat antworten Zitat
Socke_SG

Registriert seit: 31. Mär 2008
47 Beiträge
 
#5

Re: ClientSocket/ServerSocket und Hamachi

  Alt 24. Mär 2009, 13:42
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.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:46 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz