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