Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Einfaches Client - Socket Gespräch
Robii - Fr 18.12.09 01:32
Titel: Einfaches Client - Socket Gespräch
Gute Mitternacht, ich habe ein Programm geschrieben, indem ein SocketServer online geht und auf neue Verbindungen wartet.
Wenn er eine neue Verbindung bekommt, so kann man per EditFeld nachrichten an diesen Client schicken. Wenn ich jetzt mit meinem Client connecte, wird mir bei meinem Server eine Neue Verbindung + Ip-Adresse angezeigt. Möchte ich jetzt aber eine Nachricht verschicken, kommt eine Fehlermeldung, das keine Verbindung existiert. Mir aus unerklärlichen Gründen, beendet der Server immer die Verbindung oder es kommt garnicht zu einer vollkommenen Verbindung, den die Nachricht 'Neue Verbindung. (IP-ADRESSE)' lasse ich anzeigen bei dem OnConnect-Ereigniss des Servers. Wisst ihr wieso? Hier noch die Soucre vom Client und vom Server.
CLIENT
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| procedure TForm2.bConClick(Sender: TObject); begin Client.Open; end;
procedure TForm2.bSendClick(Sender: TObject); begin Client.Socket.SendText(eClient.Text); end;
procedure TForm2.ClientRead(Sender: TObject; Socket: TCustomWinSocket); begin ClientLog.Lines.Add(Socket.ReceiveText); |
SERVER
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| procedure TForm2.ServerClientConnect(Sender: TObject; Socket: TCustomWinSocket); begin Log.Lines.Add('Neue Verbindung. ('+Socket.RemoteAddress+')'); end;
procedure TForm2.bSendClick(Sender: TObject); begin Log.Lines.Add(eCmd.Text); Server.Socket.SendText('#'+eCmd.Text+'#'); end;
procedure TForm2.ServerClientDisconnect(Sender: TObject; Socket: TCustomWinSocket); begin Log.Lines.Add('Verbindung verloren ('+Socket.RemoteAddress+')'); lVic.Caption:='Keine'; SetzePosition(0); end; |
Ich hoffe ihr könnt mir helfen, habe jetzt nicht den gesamten Quellcode vom Server reingeschrieben, das Programm hat ja auch noch andere Funktionen.
Lieben Gruß & gute Nacht.
Niko S. - Fr 18.12.09 07:19
So wie ich das sehe, musst du wenn du nachrichten schickst vom Server zu Client, den eindeutig Identifizieren.
Beispielsweise wäre:
Delphi-Quelltext
1:
| ServerSocket.Socket[0].SendText('Text'); |
Der erste Client der sich verbunden hat.
//Edit:
Ja natürlich, vollkommen vergessen.. Man packt normalerweise die Sockets wo anders rein ;x
Narses hat recht (warum auch nicht ,er ist immerhin der Netzwerkexperte =D)
Robii - Fr 18.12.09 13:05
Hey Dankeschön, ich hab nochmal in das Tutorial geguckt. Klappt jetzt. Ich hab da aber noch eine Frage. Und zwar habe ich gegoogelt, weil ich mit meinem Programm auch Dateien übertragen möchte und habe folgenden Lösungsvorschlag gefunden:
Man erstellt zwei Server, einen normalen Server, über den der Client mit dem Server kommuniziert und einene FileServer, den man 'einschaltet', wenn man eine Datei übertragen kann. Dann kann man auf diesem FileServer den BinärCode der Datei an den Client schicken und dieser Empfängt auf seinem FileClient die Daten.
Nach der vollständigen Übertragung, wird der FileServer wieder ausgeschaltet und erst wieder eingeschaltet, wenn man wieder eine Datei übertragen möchte.
Vorteile sind angeblich, das man nicht den 'Kanal' vom HauptServer stört.
Kann mir jemand evtl. diese Variante etwas erläutern?
In was für einem Code muss ich die Datei den vom FileServer zum FileClient verschicken?
Und wie wandel ich die Datei um in den Code oder zurück in die Datei?
Lieben Gruß.
Narses - Sa 19.12.09 00:30
Moin!
Du könnest das z.B. per FTP machen. :idea: Gibt aber evtl. Probleme mit Routern. :nixweiss: Ist insgesamt aber auch kein einfaches Thema und schon gar nicht für den Einstieg... :?
cu
Narses
Robii - Sa 19.12.09 01:13
Abend.
Aber irgendwann muss ich mich ja mal mit der Dateiübertragung beschäftigen.
| Zitat: |
| gar nicht für den Einstieg |
Deswegen würde ich mich freuen, wenn ihr mir da helfen könnt oder Links zu Tutorials schicken könntet.
Lieben Gruß.
Moderiert von
Narses: Überflüssige Zeilenumbrüche/Leerzeilen entfernt.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!