Delphi XE 2 "Chat" Programm
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:
Ich hoffe Ihr könnt mir Helfen! Vielen Dank im vorraus :)
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. |
AW: Delphi XE 2 "Chat" Programm
Hallo.
Mit "iwie nicht erreichen kann" ist man genauso schlau wie vorher auch. Schau mal etwas genauer zu "Socket Fehler 10061" nach: Die vielleicht beste erste Anlaufstelle ist Microsoft's MSDN: Windows Sockets-Fehlercodes Jede Menge Nummern, unsere ist auch dabei: Zitat:
|
AW: Delphi XE 2 "Chat" Programm
Gar keine Lust mir deinen Code durchzulesen solange dieser nicht im Code Highlighting steht. :x
|
AW: Delphi XE 2 "Chat" Programm
Delphi-Quellcode:
Ja die Firewall habe ich schon überprüft und die Ports sind die selben.
Hier ein Codeauszug von meinem Server:
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. |
AW: Delphi XE 2 "Chat" Programm
Habe mein Problem gelöst.
Es lag am falschen Host, den ich angegeben habe. Trotzdem Danke. |
AW: Delphi XE 2 "Chat" Programm
Darf ich rein interessenshalber noch fragen welches Tutorial das war?
|
AW: Delphi XE 2 "Chat" Programm
Von DelphiTutorials.tk ganz trivial.
Ich habe da aber ein neues Problem^^ mache gleich einen neuen Tread auf wäre schön wenn du mir helfen könntest. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:54 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