Hallo,
Ich bin noch ein ziemlicher Delphi Anfänger und wollte einen
einfachen LAN Chat mit sockets schreiben. Das Problem ist,
das ich nich weiss, ob man in einer Anwendung Server und
Client in einem haben kann, ich denke nämlich dort liegt das
Problem. Hier erstma der Quelltext:
Wenn ich versuche eine Verbingung zu erstellen, bekomme ich
immer die Fehlermeldung "Asynchroner Socker Fehler". Und die
Verbindung funktioniert nur in eine Richtung. Komischerweise
funktioniert es aber, wenn ich die Anwendung 2 mal auf
dem selben Rechner laufen lasse.
Vielleicht kann mir ja jemand sagen, was ich flasch gemacht habe.
Vielen Dank
P@d3
Ich bin noch ein ziemlicher Delphi Anfänger und wollte einen
einfachen LAN Chat mit sockets schreiben. Das Problem ist,
das ich nich weiss, ob man in einer Anwendung Server und
Client in einem haben kann, ich denke nämlich dort liegt das
Problem. Hier erstma der Quelltext:
Code:
implementation
{$R *.dfm}
procedure TForm1.cb_lportClick(Sender: TObject);
begin
//Buttons (de)aktivieren
if cb_listenport.checked = true then
e_listenport.enabled := true
else
e_listenport.enabled := false;
end;
procedure TForm1.cb_ipClick(Sender: TObject);
begin
//Buttons (de)aktivieren
if cb_ip.checked = true then
e_ip.enabled := true
else
e_ip.enabled := false;
end;
procedure TForm1.b_sendClick(Sender: TObject);
var
text:string;
begin
text := e_sendtext.Text;
//Nachricht fals leere Eingabe
if e_sendtext.Text = '' then
begin
application.MessageBox('Bitte einen Text eingeben!', 'Fehler')
end else //sonst Text anbsendne
begin
//Text senden
clientsocket.Socket.SendText(text);
//Text in Memo eintragen
if m_text.lines[0] = '' then
m_text.lines[0] := TimeToStr(time)+' : '+text
else
m_text.lines.Add(TimeToStr(time)+' : '+text);
end;
end;
procedure TForm1.cb_sportClick(Sender: TObject);
begin
//Buttons (de)aktivieren
if cb_sendport.checked = true then
e_sendport.enabled := true
else
e_sendport.enabled := false;
end;
procedure TForm1.b_connectClick(Sender: TObject);
begin
//Buttons (de)aktivieren
if b_connect.caption = 'Verbinden' then
begin
//Button Einstellungen
b_connect.Caption := 'Verbindung Trennen';
b_send.enabled := true;
//Server Einstellungen
serversocket.port := StrToInt(e_listenport.Text);
serversocket.Open;
//Client Einstellungen
clientsocket.Port := StrToInt(e_sendport.text);
clientsocket.Host := e_ip.Text;
clientsocket.open;
end else
begin
//Button Einstellungen
b_connect.Caption := 'Verbinden';
b_send.Enabled := false;
serversocket.Close;
clientsocket.Close;
end;
end;
procedure TForm1.ServerSocketClientRead(Sender: TObject;
Socket: TCustomWinSocket);
var
text:string;
begin
//Text empfangen
text := socket.ReceiveText;
if m_text.lines[0] = '' then
m_text.Lines[0] := '=>'+timetostr(time)+' : '+text
else
m_text.Lines.add('=>'+timetostr(time)+' : '+text);
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
serversocket.Close;
clientsocket.Close;
end;
end.
Wenn ich versuche eine Verbingung zu erstellen, bekomme ich
immer die Fehlermeldung "Asynchroner Socker Fehler". Und die
Verbindung funktioniert nur in eine Richtung. Komischerweise
funktioniert es aber, wenn ich die Anwendung 2 mal auf
dem selben Rechner laufen lasse.
Vielleicht kann mir ja jemand sagen, was ich flasch gemacht habe.
Vielen Dank
P@d3
Zuletzt bearbeitet von einem Moderator: