AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Tutorials Delphi Einen Chat mit den Sockets programmieren

Einen Chat mit den Sockets programmieren

Ein Tutorial von Ultimator · begonnen am 5. Mai 2004 · letzter Beitrag vom 30. Jan 2014
Antwort Antwort
Seite 11 von 11   « Erste     91011
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.779 Beiträge
 
Delphi 10.4 Sydney
 
#1

Re: Einen Chat mit den Sockets programmieren

  Alt 10. Okt 2009, 18:08
Zitat von http://support.microsoft.com/kb/819124/de:
WSAETIMEDOUT (10060)

* Übersetzung : Verbindung wegen Timeout abgebrochen.
* Beschreibung : ein Verbindungsversuch ist fehlgeschlagen, weil die Gegenstelle hat nach einem bestimmten Zeitraum nicht richtig reagiert, bzw. die hergestellte Verbindung ist, fehlgeschlagen weil verbundene Host reagieren nicht.
.. kannst Du nicht den Verbindungsversuch mit try.. except kapseln
und entsprechend reagieren und eventuell später nochmals einen Verbindungsversuch starten.

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#2

Re: Einen Chat mit den Sockets programmieren

  Alt 10. Okt 2009, 18:09
Zitat von Ghostleader:
So der Chat ist jetzt fertig allerdings bekomme ich wie so viele andere den (unbeatworteten) fehler:
"Asynchroner Socket-Fehler 10060."

Was ist da los?!
Wenn es von PC1 <-> PC2 blockt da sicher noch irgendeine Firewall.
  Mit Zitat antworten Zitat
Ghostleader

Registriert seit: 22. Aug 2009
Ort: Hilden
116 Beiträge
 
Delphi 2010 Professional
 
#3

Re: Einen Chat mit den Sockets programmieren

  Alt 10. Okt 2009, 19:07
@Klaus... danke aber ich versteh nicht was ich dagegen tuen kann
gibts da eine möglichkeit das die "gegenstelle" auf den verbindungsaufbau versuch reagieren kann?
und wenn ja, wie sieht die als delphi befehl aus?

@DieMuhkuh... nein ist mein eigener chat und ich probier ihn selber aus
Michael
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#4

Re: Einen Chat mit den Sockets programmieren

  Alt 10. Okt 2009, 19:10
Solltest vielleicht mal den Code zeigen, ansonsten könnte die Fehlersuche etwas schwer sein.
  Mit Zitat antworten Zitat
Ghostleader

Registriert seit: 22. Aug 2009
Ort: Hilden
116 Beiträge
 
Delphi 2010 Professional
 
#5

Re: Einen Chat mit den Sockets programmieren

  Alt 10. Okt 2009, 19:15
okay einen moment:
(server und client sind in einem... einzelnd hab ich es auch aber so finde ich es besser - beides hat nichgeklappt -selber fehler)

Delphi-Quellcode:
unit pChat3;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls, DdeMan, IdBaseComponent, IdComponent, IdIPWatch,
  ExtDlgs, ComCtrls, Buttons, ScktComp, AppEvnts;

type
  TfmChat = class(TForm)
    MeChatlog: TMemo;
    BtSenden: TButton;
    EdSenden: TEdit;
    EdNickname: TEdit;
    btOK: TButton;
    MeWIO: TMemo;
    BtClose: TButton;
    MeChatverlauf: TMemo;
    CbStatus: TComboBox;
    cbOptionen: TComboBox;
    MeSupport: TMemo;
    MeCopyright: TMemo;
    MeHelp: TMemo;
    OpenDialog1: TOpenDialog;
    BtVerlauf: TButton;
    TmIP: TTimer;
    IdIPWatch1: TIdIPWatch;
    PaIP: TPanel;
    LaIPShow: TLabel;
    LaIP: TLabel;
    ImUser: TImage;
    BitBtn1: TBitBtn;
    ImStrich: TImage;
    DateTimePicker1: TDateTimePicker;
    OpenPictureDialog1: TOpenPictureDialog;
    ApplicationEvents1: TApplicationEvents;
    ClientSocket1: TClientSocket;
    PaServer: TPanel;
    ServerSocket1: TServerSocket;
    MeServer: TMemo;
    LaIPShow2: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure btOKClick(Sender: TObject);
    procedure EdNicknameKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure EdNicknameClick(Sender: TObject);
    procedure BtSendenClick(Sender: TObject);
    procedure BtCloseClick(Sender: TObject);
    procedure CbStatusChange(Sender: TObject);
    procedure cbOptionenChange(Sender: TObject);
    procedure MeSupportDblClick(Sender: TObject);
    procedure BtVerlaufClick(Sender: TObject);
    procedure TmIPTimer(Sender: TObject);
    procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
    procedure EdSendenChange(Sender: TObject);
    procedure ServerSocket1ClientRead(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure Delay(time: word);
    procedure ClientSocket1Connect(Sender: TObject; Socket: TCustomWinSocket);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  fmChat: TfmChat;

implementation

var Nickname: string;
var Nachricht: string;

procedure TFmChat.Delay(time:word);
var Start: Integer;
begin
Start:=GetTickCount;
while (GetTickCount)-(Start) <= time do
Application.ProcessMessages;
end;

{$R *.dfm}

procedure TfmChat.BtCloseClick(Sender: TObject);
begin
ClientSocket1.Socket.SendText (Nickname + 'hat den Chat verlassen.');
delay(500);
MeChatLog.Lines.SaveToFile ('Chat-Log.txt');
ClientSocket1.Close;
close;
end;

procedure TfmChat.btOKClick(Sender: TObject);
begin
Nickname:= EdNickname.text;
Nachricht:= (Nickname + ' hat den Raum betreten.');
delay(500);
ClientSocket1.Active:= True;
ClientSocket1.Socket.SendText (Nachricht);
BtSenden.Enabled:= True;
EdSenden.Enabled:= True;
MeChatlog.Enabled:= True;
Btok.Enabled:= False;
CbStatus.Enabled:= True;
MeWIO.Lines.Add (Nickname + ' <online>');
MeChatlog.Lines.SaveToFile ('Chat-Log.txt');
end;

procedure TfmChat.BtSendenClick(Sender: TObject);
begin
EdSenden.text:= Nachricht;
if (ClientSocket1.Active = True) and (EdSenden.text<>'') then
begin
  ClientSocket1.Socket.SendText (Nickname+ ' : '+ EdSenden.text);
end;
EdSenden.Text:='';

MeChatverlauf.Lines.LoadfromFile ('Chat-Log.txt');

end;

procedure TfmChat.BtVerlaufClick(Sender: TObject);
begin
OpenDialog1.Filter:= 'Text - Dokumente |*.txt';
OpenDialog1.FileName:= 'Wählen sie ihre Datei...';
OpenDialog1.Execute;
MeChatVerlauf.Lines.LoadFromFile (OpenDialog1.Filename);
end;

procedure TfmChat.CbStatusChange(Sender: TObject);
begin
if CbStatus.Itemindex = 1 then
begin
  MeChatlog.Lines.Add (Nickname + ' ist nun online.');
  MeWIO.Lines.Clear;
  MeWIO.Lines.Add (Nickname + ' <online>');
end;
if CbStatus.Itemindex = 2 then
begin
  MeChatlog.Lines.Add (Nickname + ' ist nun beschäftigt.');
  MeWIO.Lines.Clear;
  MeWIO.Lines.Add (Nickname + ' <Beschäftigt>');
end;
if CbStatus.Itemindex = 3 then
begin
  MeChatlog.Lines.Add (Nickname + ' ist nun abwesend.');
  MeWIO.Lines.Clear;
  MeWIO.Lines.Add (Nickname + ' <Abwesend>');
end;
if CbStatus.Itemindex = 4 then
begin
  MeChatlog.Lines.Add (Nickname + ' ist nun offline.');
  MeWIO.Lines.Clear;
  MeWIO.Lines.Add (Nickname + '-offline anzeigen-');
end;

end;

procedure TfmChat.ClientSocket1Connect(Sender: TObject;
  Socket: TCustomWinSocket);
begin

end;

procedure TfmChat.ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
begin
FmChat.Show;
MeChatlog.Lines.Add (Socket.ReceiveText);
end;

procedure TfmChat.cbOptionenChange(Sender: TObject);
begin
if CbOptionen.itemindex = 0 then
begin
  FmChat.Color:= Clskyblue;
  MeHelp.Visible:= False;
  MeSupport.Visible:= False;
  MeCopyright.Visible:= False;
end;
if CbOptionen.itemindex = 1 then
begin
  MeHelp.Visible:= True;
end
else
begin
  MeHelp.Visible:= False;
end;
if cbOptionen.itemindex = 2 then
begin
  MeSupport.Visible:= True;
end
else
begin
  MeSupport.Visible:= False;
end;
if cbOptionen.ItemIndex = 3 then
begin
  MeCopyright.Visible:= True;
end
else
begin
  MeCopyright.Visible:= False;
end;
if cbOptionen.Itemindex = 4 then
begin
  OpenPictureDialog1.Filename:= 'Ihre Datei...';
  OpenPictureDialog1.Execute;
  ImUser.Picture.LoadFromFile (OpenPictureDialog1.Filename);
end;
end;

procedure TfmChat.EdNicknameClick(Sender: TObject);
begin
EdNickname.Clear;
end;

procedure TfmChat.EdNicknameKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
Btok.Enabled:= True;
end;

procedure TfmChat.EdSendenChange(Sender: TObject);
begin
if EdSenden.text = 'Server.Listthen
begin
  PaServer.Visible:= True;
  FmChat.Height:= 636;
end
else
begin
  PaServer.Visible:= False;
  FmChat.Height:= 285;
end;
end;

procedure TfmChat.FormClose(Sender: TObject; var Action: TCloseAction);
begin
ServerSocket1.Close;
MeChatLog.Lines.SaveToFile('Chat-Log.txt');

end;

procedure TfmChat.FormCreate(Sender: TObject);
begin
LaIpShow2.Caption:= IdIPWatch1.LocalIP;
FmChat.Height:= 285;
ClientSocket1.Host:= '80.132.196.139' ;
ClientSocket1.Active:= True;
TmIP.Enabled:= True;
BtSenden.Enabled:= False;
EdSenden.Enabled:= False;
MeChatlog.Enabled:= False;
Btok.Enabled:= False;
MeChatverlauf.Lines.LoadfromFile ('Chat-Log.txt');
CbStatus.Enabled:= False;
CbOptionen.Enabled:= True;
MeSupport.Visible:= False;
MeCopyright.Visible:= False;
MeHelp.Visible:= False;

end;

procedure TfmChat.MeSupportDblClick(Sender: TObject);
begin
MeSupport.Visible:= False;
end;

procedure TfmChat.ServerSocket1ClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
  Var Text: String;
      i: integer;
begin
Text:=Socket.ReceiveText;
MeChatlog.Lines.add(Timetostr(now)+': '+Text);
For I := 0 to ServerSocket1.Socket.ActiveConnections - 1 do
begin
with ServerSocket1.Socket.Connections [I] do
if (Connected) then SendText(Text);
end;
end;

procedure TfmChat.TmIPTimer(Sender: TObject);
begin
LaIP.Caption:=IdIPWatch1.LocalIP;
end;

end.
ist ziemlich viel.

Me steht für Memo
La steht für Label
Ed steht für Edit
Tm steht für Timer
Bt steht für Button...


ansonsten einfach nachfragen
Michael
  Mit Zitat antworten Zitat
Ghostleader

Registriert seit: 22. Aug 2009
Ort: Hilden
116 Beiträge
 
Delphi 2010 Professional
 
#6

Re: Einen Chat mit den Sockets programmieren

  Alt 11. Okt 2009, 20:28
hat da jemand ne ahnung?
Michael
  Mit Zitat antworten Zitat
Ghostleader

Registriert seit: 22. Aug 2009
Ort: Hilden
116 Beiträge
 
Delphi 2010 Professional
 
#7

Re: Einen Chat mit den Sockets programmieren

  Alt 13. Okt 2009, 10:12
ist noch jemand für mich da ?
Michael
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: Einen Chat mit den Sockets programmieren

  Alt 13. Okt 2009, 10:18
1. Willst du dafür nicht einen eigenen Thread aufmachen (dann gibt es meist auch mehr Resonanz)

2. Das könnte dem Socket ein wenig zu schnell gehen:
Delphi-Quellcode:
ClientSocket1.Active:= True;
ClientSocket1.Socket.SendText (Nachricht);
Das Socket sendet ein Ereignis, wenn es fertig zum "schreiben" ist.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
DelphiProgrammer

Registriert seit: 5. Apr 2013
Ort: Kennste eh net! wer weiss, wer weiss o.o
43 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#9

AW: Einen Chat mit den Sockets programmieren

  Alt 30. Jan 2014, 07:19
Hi,

ich habe den chat programmiert und auf einem rechner funktoniert alles prima. Wenn ich jetzt aber
auf einem rechner server und einen client laufen lasse und auf einem anderen rechner(im netzwerk)
einen zweiten client habe geht nur der teil, der auf dem rechner mit dem server ist alles prima
mit rechner 2 kann ich micht nicht verbinden!
Verbindung haben beide - sie sind im selben Heimnetzwerk - und ich habe rechner 1 (der mit server)
auch angepingt: ging. Port ist 7777 denke der wird nicht belegt sein...

LG Christopher
Christopher
---------------------------------------------------
I ♥ Delphi
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.810 Beiträge
 
Delphi 12 Athens
 
#10

AW: Einen Chat mit den Sockets programmieren

  Alt 30. Jan 2014, 11:12
Die IP-Adresse des zweiten Client hast du wo und wie im Server verarbeitet?

Sherlock
Oliver
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 11 von 11   « Erste     91011

Themen-Optionen Tutorial durchsuchen
Tutorial durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:42 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz