Autor Beitrag
Robii
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 236



BeitragVerfasst: Fr 18.12.09 01:32 
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
ausblenden 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
ausblenden 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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 566
Erhaltene Danke: 10

Win 7, Ubuntu
Lazarus, Turbo Delphi, Delphu 7 PE
BeitragVerfasst: 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:
ausblenden 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)


Zuletzt bearbeitet von Niko S. am Fr 18.12.09 13:51, insgesamt 1-mal bearbeitet
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10185
Erhaltene Danke: 1261

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Fr 18.12.09 11:29 
Moin!

Die Vermutung meines Vorredners ist richtig, der Code leider nicht. Der ServerSocket ist selbst nicht zum Versenden geeignet (der ist nur zum Annehmen der Verbindungen da), sondern die bereits etablierten Verbindungen im .Connections[]-Array. :idea: Siehe dazu auch den entsprechenden FAQ-Beitrag. :think: ;)

Hier gibt´s ein einfachs Chat-Tutorial zum Einsteigen, hier geht´s weiter, wenn du mehr als Text versenden willst. :les:

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
Robii Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 236



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10185
Erhaltene Danke: 1261

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: 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

_________________
There are 10 types of people - those who understand binary and those who don´t.
Robii Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 236



BeitragVerfasst: 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 user profile iconNarses: Überflüssige Zeilenumbrüche/Leerzeilen entfernt.
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10185
Erhaltene Danke: 1261

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: So 20.12.09 01:25 
Moin!

user profile iconRobii hat folgendes geschrieben Zum zitierten Posting springen:
oder Links zu Tutorials schicken könntet.
Bittesehr: *Klick* :nixweiss:

cu
Narses

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