AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Fehler beim Chatprogramm: Asynchroner Socket-Fehler 10060
Thema durchsuchen
Ansicht
Themen-Optionen

Fehler beim Chatprogramm: Asynchroner Socket-Fehler 10060

Ein Thema von Ghostleader · begonnen am 14. Okt 2009 · letzter Beitrag vom 14. Okt 2009
Antwort Antwort
Ghostleader

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

Fehler beim Chatprogramm: Asynchroner Socket-Fehler 10060

  Alt 14. Okt 2009, 16:00
Ich habe einen Chat programmiert:
http://www.delphipraxis.net/internal...ct.php?t=24794

Habe alles fertig aber bekomme jetzt noch den Fehler:
"Asynchroner Socket-Fehler 10060."

Was ist da los?!
Ich habe den Server und den Clienten zusammen in ein Programm gesteckt (es kam einzelnd der selbe Fehler) daher ist der Quelltext ein wenig lang:

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

Die verwendeten Namen nach den "Me, La, usw." Kürzeln habe ich nach den Funktionen die der jeweilige Label, Button, o.ä. haben soll.
Das bedeutet "EdSenden" ist ein "Editfeld" in den man den" zu sendenen Text" reinschreibt.
"BtSenden" ist ganz einfach der Button, durch dessen Klick, der "zu sendene Text" aus "EdSenden" gesendet werden soll.
"MeChatLog" ist dann natürlich der "Memo" in dem der "Chatlog" also alles was geschrieben wurde/wird angezeigt werden soll.

Ansonsten bitte einfach nachfragen...

Mfg Ghost
Michael
  Mit Zitat antworten Zitat
Benutzerbild von gsh
gsh

Registriert seit: 24. Okt 2004
1.542 Beiträge
 
Delphi XE Architect
 
#2

Re: Fehler beim Chatprogramm: Asynchroner Socket-Fehler 1006

  Alt 14. Okt 2009, 16:15
Zitat:
10060
Ein Verbindungsversuch ist fehlgeschlagen, da die Gegenstelle nach einer bestimmten Zeitspanne nicht ordnungsgemäß reagiert hat, oder die hergestellte Verbindung war fehlerhaft, da der verbundene Host nicht reagiert hat.
ClientSocket1.Host:= '80.132.196.139';

1. Hardcodiert ip adresse =
2. Du hast sicher einen Router. Dort musst du den Port auf deinen PC weiterleiten. Bei Google suchenRouter port forwarding
3. Hast du den Port im OI angeben? Im Quellcode hab ich keinen gefunden
Alex
"Sage nicht alles, was du weißt, aber wisse alles, was du sagst!" Matthias Claudius
"Wer sich über Kritik ärgert, gibt zu, daß er sie verdient hat." Tacitus
  Mit Zitat antworten Zitat
Antwort Antwort


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 17:16 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