Einzelnen Beitrag anzeigen

Frage95
(Gast)

n/a Beiträge
 
#1

Delphi XE 2 "Chat" Programm

  Alt 31. Okt 2013, 09:20
Hi Leute,

ich bin ein Neuling in Delphi und habe ein kleines Chat-Programm mit Hilfe eines Tutorials programmiert.
Ich habe den Server und den Client bereits vollständig.
Doch wenn ich den Client auf einen anderen Rechner öffne um dann zu chatten, bekomme ich immer die Fehlermeldung "Asynchroner Socket Fehler 10061".
Dann habe ich probiert ob es auf dem selben Rechner funktioniert sprich, ich habe den client 2x geöffnet und alles aktiviert aber die 2 clients können nicht in beide Richtungen
kommunizieren Client 1 kann nachrichten zu Client 2 versenden aber Client 2 nicht zu Client 1.
Ich konnte in Google nichts darüber in Erfahrung bringen, außer das dieser Fehler womöglich bedeutet, dass der Client den Server i.wie nicht erreichen kann.
Hier ein Codeauszug von meinem Server:

Delphi-Quellcode:
var
  Form1: TForm1;
  UserZahl : Integer;
implementation

{$R *.dfm}



procedure TForm1.FormDestroy(Sender: TObject);
begin
Server.Active := False;
end;

procedure TForm1.ServerClientConnect(Sender: TObject; Socket: TCustomWinSocket);
begin
Memo1.Lines.Add('Status: Client ' + Socket.RemoteAddress + ' verbunden.');
Userzahl:=Userzahl +1;
User.Caption:='User: ' + IntToStr(Userzahl);

end;

procedure TForm1.ServerClientDisconnect(Sender: TObject; Socket: TCustomWinSocket);
begin
Memo1.Lines.Add('Status: Client ' + Socket.RemoteAddress + ' getrennt.');
Userzahl:=Userzahl -1;
User.Caption:='User: ' + IntToStr(Userzahl);

end;

procedure TForm1.ServerClientError(Sender: TObject; Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; var ErrorCode: Integer);
begin
Memo1.Lines.Add('Status: Client ' + Socket.RemoteAddress + 'hat den Fehler: ' + inttostr(Errorcode));
Userzahl:=Userzahl -1;
User.Caption:='User: ' + IntToStr(Userzahl);
end;

procedure TForm1.ServerClientRead(Sender: TObject; Socket: TCustomWinSocket);
var i:integer;
Nachricht:AnsiString;
begin
Nachricht:=Socket.RemoteAddress + ': ' + Socket.ReceiveText;
Memo1.Lines.Add(Nachricht);

for i := 0 to Server.Socket.ActiveConnections -1 do
  Server.Socket.Connections[i].SendText(Nachricht);

end;


procedure TForm1.BtnAnhaltenClick(Sender: TObject);
begin
Server.Port := strtoint (Port.Text);
Server.Active := False;

BtnStarten.Enabled := True;
BtnAnhalten.Enabled := False;

Memo1.Lines.Add('Status: Server angehalten.');
end;

procedure TForm1.BtnClearClick(Sender: TObject);
begin
Memo1.Lines.Clear;
Memo1.Lines.Add('Server 1.0');
end;

procedure TForm1.BtnSendenClick(Sender: TObject);
var i:Integer;
begin
for i := 0 to Server.Socket.ActiveConnections -1 do
   Server.Socket.Connections[i].SendText('Nachricht vom Server: ' + EdSenden.Text);
  Memo1.Lines.Add('Nachricht vom Server: ' + EdSenden.Text);
  EdSenden.Clear;
end;

procedure TForm1.BtnStartenClick(Sender: TObject);
begin
Server.Port := strtoint (Port.Text);
Server.Active := True;

BtnStarten.Enabled := False;
BtnAnhalten.Enabled := True;

Memo1.Lines.Add('Status: Server gestartet.');
end;


end.

Und dass hier ist mein Client:


var
  Form1: TForm1;
  UserZahl : Integer;
implementation

{$R *.dfm}



procedure TForm1.FormDestroy(Sender: TObject);
begin
Server.Active := False;
end;

procedure TForm1.ServerClientConnect(Sender: TObject; Socket: TCustomWinSocket);
begin
Memo1.Lines.Add('Status: Client ' + Socket.RemoteAddress + ' verbunden.');
Userzahl:=Userzahl +1;
User.Caption:='User: ' + IntToStr(Userzahl);

end;

procedure TForm1.ServerClientDisconnect(Sender: TObject; Socket: TCustomWinSocket);
begin
Memo1.Lines.Add('Status: Client ' + Socket.RemoteAddress + ' getrennt.');
Userzahl:=Userzahl -1;
User.Caption:='User: ' + IntToStr(Userzahl);

end;

procedure TForm1.ServerClientError(Sender: TObject; Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; var ErrorCode: Integer);
begin
Memo1.Lines.Add('Status: Client ' + Socket.RemoteAddress + 'hat den Fehler: ' + inttostr(Errorcode));
Userzahl:=Userzahl -1;
User.Caption:='User: ' + IntToStr(Userzahl);
end;

procedure TForm1.ServerClientRead(Sender: TObject; Socket: TCustomWinSocket);
var i:integer;
Nachricht:AnsiString;
begin
Nachricht:=Socket.RemoteAddress + ': ' + Socket.ReceiveText;
Memo1.Lines.Add(Nachricht);

for i := 0 to Server.Socket.ActiveConnections -1 do
  Server.Socket.Connections[i].SendText(Nachricht);

end;


procedure TForm1.BtnAnhaltenClick(Sender: TObject);
begin
Server.Port := strtoint (Port.Text);
Server.Active := False;

BtnStarten.Enabled := True;
BtnAnhalten.Enabled := False;

Memo1.Lines.Add('Status: Server angehalten.');
end;

procedure TForm1.BtnClearClick(Sender: TObject);
begin
Memo1.Lines.Clear;
Memo1.Lines.Add('Server 1.0');
end;

procedure TForm1.BtnSendenClick(Sender: TObject);
var i:Integer;
begin
for i := 0 to Server.Socket.ActiveConnections -1 do
   Server.Socket.Connections[i].SendText('Nachricht vom Server: ' + EdSenden.Text);
  Memo1.Lines.Add('Nachricht vom Server: ' + EdSenden.Text);
  EdSenden.Clear;
end;

procedure TForm1.BtnStartenClick(Sender: TObject);
begin
Server.Port := strtoint (Port.Text);
Server.Active := True;

BtnStarten.Enabled := False;
BtnAnhalten.Enabled := True;

Memo1.Lines.Add('Status: Server gestartet.');
end;


end.
Ich hoffe Ihr könnt mir Helfen! Vielen Dank im vorraus

Geändert von MrSpock (31. Okt 2013 um 12:13 Uhr) Grund: Delphi Tags eingefügt.
  Mit Zitat antworten Zitat