Entwickler-Ecke

Internet / Netzwerk - Fehler beim Senden eines Textes


andras - Di 14.03.06 18:07
Titel: Fehler beim Senden eines Textes
hallo!
ich hab mir mit den Socket-kompos einen server und einen clinet zusammengebastelt. wenn ich verbinde und versuche einen kurzen text zu senden kommt folgende fehlermedlung:

Quelltext
1:
Windows-Socket-Fehler: Eine Anforderung zum Senden oder Empfangen von Daten wurde verhinder, da des Socket nicht verbunden ist und (beim Senden über einen Datagrammsocket mit einem sendto-Aufruf) keine Adresse eingegeben wurde (10057), auf API'getpeername'                    


der host ist localhost.
die anmeldung des clients am server funktioniert.
kann mir wer helfen??
danke schon im voraus!


Moderiert von user profile iconraziel: Topic aus VCL (Visual Component Library) verschoben am Di 14.03.2006 um 19:39


Marco D. - Di 14.03.06 18:25

Tritt das Client-Ereignis OnConnect ein?
Gib mal den Code zum Senden!


andras - Di 14.03.06 18:33

ja, da tritt ein.

hier der client code:

Delphi-Quelltext
1:
2:
3:
ClientSocket1.Open;
ClientSocket1.Socket.SendText('Hallo Server! Hallo Welt!');
ClientSocket1.Close;

nichts aufregendes.


Born-to-Frag - Di 14.03.06 18:50

user profile iconandras hat folgendes geschrieben:
ja, da tritt ein.

hier der client code:

Delphi-Quelltext
1:
2:
3:
ClientSocket1.Open;
ClientSocket1.Socket.SendText('Hallo Server! Hallo Welt!');
ClientSocket1.Close;

nichts aufregendes.


Woher weißt du ob er Connected ist :shock:

Mach das

Delphi-Quelltext
1:
2:
ClientSocket1.Socket.SendText('Hallo Server! Hallo Welt!');
ClientSocket1.Close;


Bei onConnect rein und versuchs noch mal


andras - Di 14.03.06 18:57

also, es ändert nichts.


Fighter#1 - Di 14.03.06 19:01

???
Gibst du bei beiden den/die selbe/n Port, IP an?

Steht nicht im Quelltext


andras - Di 14.03.06 19:06

port is der selbe.
host ist localhost.
ws muss ich leicht sonst noch angeben?


Fighter#1 - Di 14.03.06 19:09

bei beiden halt .open; oder .active:=True;
sonst eig. nix


andras - Di 14.03.06 19:10

beide sind .open


Fighter#1 - Di 14.03.06 20:23

Dann lass irgendwas im Connect ereignis des clients und Server passieren.
Ich schau mal nachher was Fehlercode 10053 heißt


andras - Fr 17.03.06 23:35

so, hab jetzt was passieren lassen beim onconnect-ereignis und es tritt ein. hab alles mal mit dem debugger durchgetestet. der fehler tritt beim text auf nicht beim anmelden.


Fighter#1 - Sa 18.03.06 11:16

Poste mal bitte den gesamten Code, dann kann ich schauen wo der Fehler liegt.


andras - Sa 18.03.06 13:55

hier der client:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ScktComp, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    ClientSocket1: TClientSocket;
    Label1: TLabel;
    procedure ClientSocket1Connect(Sender: TObject; Socket: TCustomWinSocket);
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
ClientSocket1.Port:=123;
ClientSocket1.Host:='localhost';
ClientSocket1.Open;
end;

procedure TForm1.ClientSocket1Connect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
Label1.Caption:='Verbunden';
ClientSocket1.Socket.SendText('Hallo Server! Hallo Welt!');
ClientSocket1.Close;
end;

end.


und hier der server:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ScktComp;

type
  TForm1 = class(TForm)
    ServerSocket1: TServerSocket;
    Label1: TLabel;
    Label2: TLabel;
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormCreate(Sender: TObject);
    procedure ServerSocket1ClientRead(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure ServerSocket1ClientConnect(Sender: TObject;
      Socket: TCustomWinSocket);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.ServerSocket1ClientConnect(Sender: TObject;
  Socket: TCustomWinSocket);
begin

Label1.Caption:='Anmeldung erfolgreich'
end;

procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
begin
Label2.Caption:=ServerSocket1.Socket.ReceiveText;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
ServerSocket1.Port:=123;
ServerSocket1.Open;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
ServerSocket1.Close;
end;

end.


Fighter#1 - Sa 18.03.06 14:15

OK das problem liegt darin das du beim Server im OnClientRead ereignis eingibst :

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
ServerSocket1.Socket.ReceiveText...

Aber im OnClientRead Ereignis wird dir eine Socket (wies im Header steht Socket) gegeben.
Nutze sie und die Probleme sind weg.
dann sollte es da so aussehen:



procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
begin
         Label2.Caption:=Socket.ReceiveText;
end;


andras - Sa 18.03.06 14:38

juhuu!! es funktioniert!!!! :dance2:

DANKE!!!