![]() |
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:
Wenn jemand ne Idee hätte, wäre ich sehr dankbar.
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. manuel |
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 |
Re: ESocketError (10057)
Hi Aenogym,
hab ich geändert, die Fehlermeldung ist immer noch die selbe... nur die Fehlerbeschreibung sieht anders aus :? manuel |
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 |
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? |
Re: ESocketError (10057)
Hi!
Google sagt zu der Exception folgendes: Zitat:
Ciao Frederic |
Re: ESocketError (10057)
das selbe spiel hab ich auch, hunderte posts aber keine wirkliche lösung... :?
|
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 |
Re: ESocketError (10057)
ich komme ja nciht einmal zum connecten :lol:
das ist ärgerlich :( |
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 00:12 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz