Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi fehler 10049 (https://www.delphipraxis.net/109957-fehler-10049-a.html)

matze222 10. Mär 2008 21:44

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

sirius 11. Mär 2008 07:51

Re: fehler 10049
 
Und wie hast du das programmiert? Indy? Welche Version? Vielleicht etwas Code, wo der Fehler auftritt.

matze222 11. Mär 2008 11:50

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:
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.
und server:

Delphi-Quellcode:
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.
reicht das jetz?

RavenIV 11. Mär 2008 12:20

Re: fehler 10049
 
Zitat:

Zitat von matze222
man ihr seid aber auch anspruchsvoll...
aber nagut wenns sein muss^^

[Schnipp - Schnapp]

reicht das jetz?

Es wurde nach Etwas Code gefragt.

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.

sirius 11. Mär 2008 12:23

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.

matze222 11. Mär 2008 14:21

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

sirius 12. Mär 2008 07:55

Re: fehler 10049
 
Wenn der Fehler nur übers Internet passiert, dann würde ich mal auf fehlende NAT-Einstellungen auf deinem Router tippen.

matze222 18. Mär 2008 21:34

Re: fehler 10049
 
?????

noch mal auf deutsch bitte xD

ne das sagt mir leider gar nichts
is nich böse gemeint

sirius 18. Mär 2008 22:03

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.

matze222 18. Mär 2008 22:32

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.
Seite 2 von 2     12   

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