Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Error 10049 kann nicht connecten (https://www.delphipraxis.net/6404-error-10049-kann-nicht-connecten.html)

Russel-Athletic2 9. Jul 2003 18:04


Error 10049 kann nicht connecten
 
Also ich wollte mit socket etwas machen. Grob gesagt sollen records hin und her geschickt werden. früher habe ich dass mit indy gemacht, aber dass wurde zu kompliziert und deswegen versuche ich jetzt sockets. hier der relevante code:

Client:
Delphi-Quellcode:
procedure Tform1.loginbuttonClick(Sender: TObject);
var rec1:iprec;
begin
clientsock.Port:=628;
clientsock.Host:='127.0.0.1';
clientsock.active:=true;

rec1.clientip:=ip;
rec1.clienthost:=host;
clientsock.open;
clientsock.Socket.SendBuf(rec1,sizeof(rec1));
showmessage('hallo');
clientsock.close;
end;
Server
Delphi-Quellcode:
procedure Tform1.bsvcontrClick(Sender: TObject);
begin
if bsvcontr.caption='Server ist online' then
begin
        bsvcontr.caption:='Server ist offline';
        serversock.active:=false;
        serversock.socket.close;
end else begin
        if bsvcontr.caption='Server ist offline' then
        begin
                bsvcontr.caption:='Server ist online';
                serversock.Port:=628;
                serversock.active:=true;
                serversock.Open;
        end;
end;
end;
Ich hoffe ihr könnt mir helfen.
Edit: delphisource gekenzeichnet

Marco Haffner 9. Jul 2003 18:30

Re: Error 10049 kann nicht connecten
 
Erstmal herzlich Willkomen im Forum. :hello:

Zur besseren lesbarkeit gibt es oben im Editor die Schaltfläche "Delphi-Source" oder durch eingabe von [ delphi ] und [ /delphi ].

Um mit den Client-Server-Socket-Komponenten Daten zu versenden gibt es ein paar Ereignisse.
Anstatt sofort die Daten mit dem Client zu versenden, solltest Du erst warten. bis die Verbindung aufgebaut wurde, dafür ist das Ereigniss OnConnect zuständig. Außerdem muß natürlich erst der Server gestartet sein.

Anstatt den Status vom String abhängig zu machen, verwende:
Delphi-Quellcode:
  if serversock.Active then
  begin
    bsvcontr.Caption := 'Server ist online';
    ...
    ...
  end else begin
    bsvcontr.Caption := 'Server ist offline';
    ...
    ...
  end;
Zum lesen mußt Du im Server auf das OnRead-Ereignis reagieren.

Russel-Athletic2 9. Jul 2003 18:46

Re: Error 10049 kann nicht connecten
 
Ich hab das mal ebend verändert und nun sagt er mir, 10053 errorcode und beim quasi, dass er nicht empfangen konnte.
Diese wird wohl dabei auch noch wichtig sein
Delphi-Quellcode:
procedure Tform1.serversockClientWrite(Sender: TObject;
  Socket: TCustomWinSocket);
  var rec1:iprec;
  begin
  serversock.Socket.ReceiveBuf(rec1,sizeof(rec1));
  showmessage('hallo');
end;

Marco Haffner 9. Jul 2003 18:59

Re: Error 10049 kann nicht connecten
 
Du versuchst gerade im OnWrite-Ereignis zu lesen.

Russel-Athletic2 9. Jul 2003 19:57

Re: Error 10049 kann nicht connecten
 
Er sagt mir immer noch 1053 und danach accsess violation. Ich hab erstmal in onclientconnect geschrieben, ich hoffe dass war richtiger.
Delphi-Quellcode:
procedure Tform1.serversockClientConnect(Sender: TObject;
  Socket: TCustomWinSocket);
  var rec1:iprec;
  z:integer;
  begin
  serversock.Socket.ReceiveBuf(rec1,sizeof(rec1));
  z:=serversock.socket.ActiveConnections;
  stringgrid.cells[z,1]:=rec1.clientip;
  stringgrid.cells[z,2]:=rec1.clienthost;
end;

Marco Haffner 9. Jul 2003 20:07

Re: Error 10049 kann nicht connecten
 
Empfangen gehört in OnRead wenn der ServerType auf stNonBlocking eingestellt ist (standard). Auch der ClientType muß dann auf ctNonBlocking eingestellt sein.
Außerdem siehe Hier im Forum suchenTClientSocket TServerSocket, da habe ich auch ein kleines Programm das ein Bitmap versendet und ThreadBlocked arbeitet. Vielleicht hilft es weiter.
Delphi-Quellcode:
procedure TFormServer.ServerSocketClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
var
  rec1: iprec;
  z: integer;
begin
  serversock.Socket.ReceiveBuf(rec1,sizeof(rec1));
  z := serversock.socket.ActiveConnections;
  stringgrid.cells[z,1] := rec1.clientip;
  stringgrid.cells[z,2] := rec1.clienthost;
end;

Russel-Athletic2 9. Jul 2003 20:53

Re: Error 10049 kann nicht connecten
 
funktioniert immer noch nicht. er gibt mir jetzt folgende fehlermeldungen:
client socket error 10053 danach socket error 10054
server: socket error 10057

Marco Haffner 9. Jul 2003 21:05

Re: Error 10049 kann nicht connecten
 
Du trennst anscheinend die Client-Server-Verbindung, bevor die Daten gesendet werden.
Welche TClientSocket und welche TServerSocket-Ereigniss verwendest Du jetzt?
Wie sieht der Quelltext der einzelnen Ereignisse aus, Eigenschaften?

Russel-Athletic2 9. Jul 2003 21:18

Re: Error 10049 kann nicht connecten
 
server
Delphi-Quellcode:
procedure Tform1.serversockClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
  var rec1:iprec;
  z:integer;
  begin
  serversock.Socket.ReceiveBuf(rec1,sizeof(rec1));
  z:=serversock.socket.ActiveConnections;
  stringgrid.cells[z,1]:=rec1.clientip;
  stringgrid.cells[z,2]:=rec1.clienthost;
end;
client
Delphi-Quellcode:
procedure Tform1.loginbuttonClick(Sender: TObject);
var rec1:iprec;
begin
clientsock.Port:=628;
clientsock.Host:='127.0.0.1';
clientsock.active:=true;
end;

procedure Tform1.clientsockConnect(Sender: TObject;
  Socket: TCustomWinSocket);
var rec1:iprec;
begin
rec1.clientip:=ip;
rec1.clienthost:=host;
clientsock.open;
clientsock.Socket.SendBuf(rec1,sizeof(rec1));
end;
Und sonst greift ncihts auf die Sockets zu. Komischerweise hab ich jetzt wieder den weiterobengenannten fehler mit 10053 und kan nciht senden.

Marco Haffner 9. Jul 2003 22:02

Re: Error 10049 kann nicht connecten
 
Delphi-Quellcode:
procedure TForm1.ServerSocketClientConnect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
  StatusBar.Panels[0].Text := 'Server verbunden';
end;

procedure TForm1.ServerSocketClientDisconnect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
  StatusBar.Panels[0].Text := 'Server getrennt';
end;

procedure TForm1.ServerSocketAccept(Sender: TObject;
  Socket: TCustomWinSocket);
begin
  with ListBox.Items do
  begin
    Add('Client akzeptiert:');
    Add('> Host  : ' + Socket.RemoteHost);
    Add('> Adresse: ' + Socket.RemoteAddress);
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  ServerSocket.Open;
  EditHostChange(nil);
end;

procedure TForm1.ButtonConnectClick(Sender: TObject);
begin
  with ClientSocket do
  begin
    Host := EditHost.Text;
    Open;
  end;
end;

procedure TForm1.EditHostChange(Sender: TObject);
begin
  ButtonConnect.Enabled := not (EditHost.Text = '') and not ClientSocket.Active;
end;

procedure TForm1.ClientSocketConnect(Sender: TObject;
  Socket: TCustomWinSocket);
var
  Text: string;
begin
  ButtonConnect.Enabled := False;
  ButtonDisconnect.Enabled := True;
  EditHost.Enabled := False;
  StatusBar.Panels[1].Text := 'Client verbunden';

  Text := Socket.LocalHost;
  Socket.SendBuf(PChar(Text)^, Length(Text));
end;

procedure TForm1.ClientSocketDisconnect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
  ButtonConnect.Enabled := True;
  ButtonDisconnect.Enabled := False;
  EditHost.Enabled := True;
  StatusBar.Panels[1].Text := 'Client getrennt';
end;

procedure TForm1.ButtonDisconnectClick(Sender: TObject);
begin
  ClientSocket.Close;
end;

procedure TForm1.ServerSocketClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
var
  RecText: string;
begin
  SetLength(RecText, Socket.ReceiveLength);
  Socket.ReceiveBuf(PChar(RecText)^, Socket.ReceiveLength);
  ShowMessage(RecText);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  ClientSocket.Close;
  ServerSocket.Close;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:29 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