Re: fehler 10049
ja rate dochma^^
jane sry vergessn^^ ich hab n chat geschrieben (wie schon so viele vor mir) und wenn ihc mich mit dem client mit dem server verbinden will dauert das n mom und dann erscheint dieser fehler... bzw wenn n kumpel das macht kommt der fehler 10060 |
Re: fehler 10049
Und wie hast du das programmiert? Indy? Welche Version? Vielleicht etwas Code, wo der Fehler auftritt.
|
Re: fehler 10049
man ihr seid aber auch anspruchsvoll...
aber nagut wenns sein muss^^ ich hab ne klassische client server verbindung genommen... mit den sockets. delphi 6 client:
Delphi-Quellcode:
und server:
unit Unit1;
interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ScktComp, StdCtrls; const // Port, an dem der ServerSocket auf Clients wartet SERVER_PORT = 12345; type // Verbindungszustände des Clients (für die Button-Steuerung) TMyConState = ( mcsOffline, // nicht verbunden mcsPending, // Verbindungsstatus ändert sich gerade mcsOnline // verbunden ); TForm1 = class(TForm) server: TEdit; nickname: TEdit; log: TMemo; btnconnect: TButton; btndisconnect: TButton; Clients: TListBox; btnsend: TButton; input: TEdit; Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; ClientSocket1: TClientSocket; procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure BtnConnectClick(Sender: TObject); procedure BtnDisconnectClick(Sender: TObject); procedure ClientSocket1Connect(Sender: TObject; Socket: TCustomWinSocket); procedure ClientSocket1Disconnect(Sender: TObject; Socket: TCustomWinSocket); procedure ClientSocket1Error(Sender: TObject; Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; var ErrorCode: Integer); procedure BtnSendClick(Sender: TObject); procedure InputKeyPress(Sender: TObject; var Key: Char); procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket); private FMyConState: TMyConState; procedure SetConState(const Value: TMyConState); public property ConnectionState: TMyConState read FMyConState write SetConState; end; var Form1: TForm1; implementation {$R *.dfm} // bei Programmstart ausführen procedure TForm1.FormCreate(Sender: TObject); begin ClientSocket1.Port := SERVER_PORT; // Port setzen ConnectionState := mcsOffline; // Buttons anpassen end; // neuer Verbindungsstatus -> GUI anpassen procedure TForm1.SetConState(const Value: TMyConState); begin FMyConState := Value; // neuen Status speichern // Buttons entsprechend de-/aktivieren BtnConnect.Enabled := (Value = mcsOffline); BtnDisconnect.Enabled := (Value = mcsOnline); BtnSend.Enabled := (Value = mcsOnline); end; // bei Programmende ausführen procedure TForm1.FormDestroy(Sender: TObject); begin BtnDisconnectClick(Self); // auf jeden Fall abmelden end; // Verbindung zum Server aufnehmen procedure TForm1.BtnConnectClick(Sender: TObject); begin ConnectionState := mcsPending; // Buttons anpassen ClientSocket1.Host := Server.Text; // Serveradresse übernehmen ClientSocket1.Open; // Verbindung versuchen und warten, was passiert // Verbindung OK: weiter bei ClientSocket1Connect(), sonst ClientSocket1Error() end; // Verbindung zum Server trennen procedure TForm1.BtnDisconnectClick(Sender: TObject); begin ConnectionState := mcsPending; // Buttons anpassen if (ClientSocket1.Active) then // noch verbunden? ClientSocket1.Close // dann trennen und warten, was passiert // Trennung OK: weiter in ClientSocket1Disconnect(), sonst ClientSocket1Error() else ConnectionState := mcsOffline; // sonst sind wir schon Offline end; // Verbindung zum Server ist aufgebaut und bereit zum Senden/Empfangen procedure TForm1.ClientSocket1Connect(Sender: TObject; Socket: TCustomWinSocket); begin ConnectionState := mcsOnline; // Buttons anpassen Log.Clear; // Protokollfenster löschen Log.Lines.Add('Verbunden mit: '+ClientSocket1.Socket.RemoteHost); end; // Verbindung zum Server (normal) getrennt procedure TForm1.ClientSocket1Disconnect(Sender: TObject; Socket: TCustomWinSocket); begin ConnectionState := mcsOffline; // Buttons anpassen Clients.Clear; // User-Liste leeren Log.Lines.Add('Verbindung getrennt.'); end; // Es ist ein Fehler in der Verbindung aufgetreten; sicherheitshalber trennen procedure TForm1.ClientSocket1Error(Sender: TObject; Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; var ErrorCode: Integer); begin if (ClientSocket1.Active) then // noch verbunden? ClientSocket1.Close; // ja, dann trennen ConnectionState := mcsOffline; // Buttons anpassen Clients.Clear; // User-Liste leeren ErrorCode := 0; // Fehler behandelt, keine Exception erzeugen Log.Lines.Add('Verbindungsfehler!'); end; // Benutzernachricht senden ("reden") procedure TForm1.BtnSendClick(Sender: TObject); begin ClientSocket1.Socket.SendText(Input.Text); end; // Eingabetaste im Textfeld -> senden und wieder alles auswählen procedure TForm1.InputKeyPress(Sender: TObject; var Key: Char); begin if (Key = #13) then begin // Return/Enter gedrückt? BtnSendClick(Self); // dann Text senden Input.SetFocus; // Editfeld wieder auswählen Input.SelectAll; // und den ganzen Text markieren end; end; // Daten vom Server empfangen procedure TForm1.ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket); begin Log.Lines.Add(Socket.ReceiveText); // Daten lesen end; end.
Delphi-Quellcode:
reicht das jetz?
unit Unit1;
interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ScktComp, StdCtrls; const // Port, an dem der ServerSocket auf Clients warten soll SERVER_PORT = 12345; type TForm1 = class(TForm) Log: TMemo; Input: TEdit; BtnSend: TButton; Clients: TListBox; ServerSocket1: TServerSocket; Label1: TLabel; Label2: TLabel; Label3: TLabel; procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure ServerSocket1ClientConnect(Sender: TObject; Socket: TCustomWinSocket); procedure DeleteClient(Socket: TCustomWinSocket); procedure ServerSocket1ClientDisconnect(Sender: TObject; Socket: TCustomWinSocket); procedure ServerSocket1ClientError(Sender: TObject; Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; var ErrorCode: Integer); procedure BtnSendClick(Sender: TObject); procedure InputKeyPress(Sender: TObject; var Key: Char); procedure ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket); procedure ClientSend(const Text: String); procedure Broadcast(const Name, Text: String); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} // bei Programmstart ausführen procedure TForm1.FormCreate(Sender: TObject); begin ServerSocket1.Port := SERVER_PORT; // Port setzen ServerSocket1.Open; // Server aktivieren end; // bei Programmende ausführen procedure TForm1.FormDestroy(Sender: TObject); begin if (ServerSocket1.Active) then begin // wenn der Server noch aktiv ist Broadcast('System','Server beendet.'); // Clients benachrichtigen ServerSocket1.Close; // und dann beenden end; end; // ein neuer Client hat sich verbunden procedure TForm1.ServerSocket1ClientConnect(Sender: TObject; Socket: TCustomWinSocket); begin Clients.AddItem(Socket.RemoteHost,Socket); // in die Liste end; // Client aus der Userliste entfernen procedure TForm1.DeleteClient(Socket: TCustomWinSocket); var i: Integer; begin i := Clients.Items.IndexOfObject(Socket); // Client noch in der Liste? if (i > -1) then begin // ja Clients.Items.Delete(i); // dann entfernen end; end; // ein Client hat sich getrennt procedure TForm1.ServerSocket1ClientDisconnect(Sender: TObject; Socket: TCustomWinSocket); begin DeleteClient(Socket); // Client aus der Userliste nehmen end; // Fehler in einer Clientverbindung aufgetreten; Client sicherheitshalber trennen procedure TForm1.ServerSocket1ClientError(Sender: TObject; Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; var ErrorCode: Integer); begin if (Socket.Connected) then // noch verbunden? Socket.Close; // dann Verbindung trennen DeleteClient(Socket); // Client aus der Userliste nehmen ErrorCode := 0; // Fehler behandelt, keine Exception erzeugen end; // Daten zu allen Clients senden procedure TForm1.ClientSend(const Text: String); var i: Integer; begin for i := 0 to Clients.Count-1 do // an alle Verbindungen... (Clients.Items.Objects[i] as TCustomWinSocket).SendText(Text); // senden end; // Text-Meldung ausgeben und an die Clients weiterreichen procedure TForm1.Broadcast(const Name, Text: String); begin Log.Lines.Add(Name+': '+Text); ClientSend(Name+': '+Text); end; // System-Nachricht senden procedure TForm1.BtnSendClick(Sender: TObject); begin Broadcast('System',Input.Text); end; // Eingabetaste im Textfeld -> senden und wieder alles auswählen procedure TForm1.InputKeyPress(Sender: TObject; var Key: Char); begin if (Key = #13) then begin // Return/Enter gedrückt? BtnSendClick(Self); // dann Text senden Input.SetFocus; // Editfeld wieder auswählen Input.SelectAll; // und den ganzen Text markieren end; end; // Daten von einem Client empfangen procedure TForm1.ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket); var i: Integer; begin i := Clients.Items.IndexOfObject(Socket); // Client identifizieren if (i > -1) then begin // Client ist in der Liste, Index "i" ist gültig Log.Lines.Add(Socket.RemoteHost+': '+Socket.ReceiveText); end else // Client ist nicht in der Liste?! (sollte nicht auftreten) Log.Lines.Add('Daten von unregistriertem Client empfangen: '+Socket.ReceiveText); end; end. |
Re: fehler 10049
Zitat:
Das heisst nicht, dass Du uns gleich zumüllen musst. Es hätte auch gereicht, wenn Du den Code als Attachement angehängt hättest. Dann könnte jeder, der Interesse hat, sich den Code runterladen. Wer kein Interesse hat, meterweise Code durchzuscrollen, der würde dann nicht belästigt. |
Re: fehler 10049
Und dann wäre noch interessant, wo der Fehler auftritt.
Bist du dir sicher, dass du deine ClientListbox immer synchron zu ServClientListe halten kannst. Da könnten ungewollt Unterschiede auftreten, welche zum Fehler führen. |
Re: fehler 10049
achja der fehler der fehler tritt auf wenn ich mich versuche mit dem client einzu loggn
das heißt wenn ich auf verbinden klicke wenn n kumpel das macht , sprich über i-net dann kommt der fehler 10060 zum quell code... ich hab doch keinen plan was ihr braucht ich kenn mich halt noch nich so im programieren aus... sry |
Re: fehler 10049
Wenn der Fehler nur übers Internet passiert, dann würde ich mal auf fehlende NAT-Einstellungen auf deinem Router tippen.
|
Re: fehler 10049
?????
noch mal auf deutsch bitte xD ne das sagt mir leider gar nichts is nich böse gemeint |
Re: fehler 10049
du baust eine TCP-Verbindung von einem Client zu einem Server auf. Der Server ist ein Rechner der anscheinend über einen Router ans Internet gekoppelt ist. Dein Freund schickt an deinen Router die Anfrage für eine Verbindung und der Router weiß nichts damit anzufangen. Das simpelste wäre dann, im Router die NAT-Einstellungen anzupassen.
|
Re: fehler 10049
okay
und was ist eine tcp verbindung? und was die nat einstellungen? sry ich hab echt so gar keine ahnung von sowas jedenfalls was die fachbegriffe angeht xD ich bin halt abei mir son bosle wissen anzueignen |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:00 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