Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi ESocketError (10057) (https://www.delphipraxis.net/32484-esocketerror-10057-a.html)

manuel 23. Okt 2004 22:00


ESocketError (10057)
 
Hi Leute,

ich versuche gerade eine einfache C/S-Anwendung mittels
TClientSocket und TServerSocket unter D3 zu schreiben.
Beim Empfangen der Nachricht mittels ReceifBuf erhalte ich immer eine
ESocketError (10057) - Exception. :(
Versuche ich das ganze mit sendText funktionierts komischerweise. :gruebel:

hier mal der Quelltext:

Delphi-Quellcode:
unit Unit1;

interface

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

    type
  CustomRec = record
    StartTag: integer;
    MSG_1: String;
    MSG_2: String;
    CheckSum: Integer;
    EndTag: integer;
end;


type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
    procedure ServerClientRead(Sender: TObject; Socket: TCustomWinSocket);
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
    Client: TClientSocket;
    Server: TServerSocket;
    ReceiveRec: CustomRec;
    SendRec: CustomRec;
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
begin

Client:=TClientSocket.Create(Form1);
  Server:=TServerSocket.Create(Form1);
  Server.OnClientRead:=ServerClientRead;
Server.Port:=10024;
Client.Port:=10024;
  Client.Host:='127.0.0.1';
  Server.Open;
  Client.Open;




end;

procedure TForm1.ServerClientRead(Sender: TObject; Socket: TCustomWinSocket);
begin
Server.Socket.ReceiveBuf(ReceiveRec,sizeof(ReceiveRec));
showMessage(ReceiveRec.MSG_1);
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
sendRec.MSG_1:='Test123';
Client.Socket.SendBuf(sendRec,sizeof(sendRec));
end;

end.
Wenn jemand ne Idee hätte, wäre ich sehr dankbar.

manuel

Aenogym 23. Okt 2004 22:14

Re: ESocketError (10057)
 
hi,

könnte es vielleicht daran liegen, dass du nicht ohne weiteres delphi-strings durchs netz schicken kannst? versuche mal deine strings-deklarationen im record zu begrenzen (string[50];zum beispiel).

klappt es dann?

Aenogym

manuel 23. Okt 2004 22:19

Re: ESocketError (10057)
 
Hi Aenogym,

hab ich geändert, die Fehlermeldung ist immer noch die selbe...
nur die Fehlerbeschreibung sieht anders aus :?

manuel

jfheins 23. Okt 2004 22:20

Re: ESocketError (10057)
 
Das kann man nicht, stimmt. Aber ich habe dabei immer ne AV bekommen und keinen Socket error.

Also: Der Record muss eine feste größe haben, die Strings müsen z.B. mit String[255] deklariert werden

manuel 23. Okt 2004 23:05

Re: ESocketError (10057)
 
Das Problem mit dem String ist keins...
hab alle Strings rausgeworfen, die fehlermeldung ändert sich nicht. :(
Hat sonst noch jemand vorschläge?

fkerber 23. Okt 2004 23:24

Re: ESocketError (10057)
 
Hi!

Google sagt zu der Exception folgendes:
Zitat:

Socket Error # 10057

Socket error (#10057): Socket type not supported.

Analyse & Solutions: A request to send or receive data was disallowed because the socket is not connected and (when sending on a datagram socket) no address was supplied.

Ciao Frederic

DymonD 11. Mär 2006 11:33

Re: ESocketError (10057)
 
das selbe spiel hab ich auch, hunderte posts aber keine wirkliche lösung... :?

ManuMF 11. Mär 2006 11:37

Re: ESocketError (10057)
 
Hallo,

ich hatte auch Probleme, allerdings beim Versenden eines Strings. Ich habe es gelöst, in dem ich nicht gleich nach Client.Open sende, sondern in der Prozedur Client.OnConnect.

Gruß,
ManuMF

DymonD 11. Mär 2006 11:38

Re: ESocketError (10057)
 
ich komme ja nciht einmal zum connecten :lol:
das ist ärgerlich :(

Muetze1 11. Mär 2006 12:14

Re: ESocketError (10057)
 
1. Im OnConnect Aktionen ausführen
2. Im OnClientRead bitte auch vorher abprüfen, ob im Puffer überhaupt schon der gesamte Record zum auslesen bereit liegt. Man kann doch nicht einfach sagen, lese mir mal 1 Megabyte aus, wenn der gerade mal 4 Bytes empfangen hat. Also ReceiveLen überprüfen und entsprechend handeln im OnClientRead.
3. Wenn du kein Connect hinbekommst, dann sollte aber eine Fehlermeldung vom Socket kommen die dir Aufschluß darüber geben sollte, was schief gelaufen ist.


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:02 Uhr.
Seite 1 von 2  1 2      

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