Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi socket error 10053 (https://www.delphipraxis.net/6762-socket-error-10053-a.html)

Russel-Athletic2 21. Jul 2003 17:24


socket error 10053
 
ich bekomme den socket error 10053 ich hoffe um hilfe.

Server:
Delphi-Quellcode:
procedure Tform1.bsvcontrClick(Sender: TObject);
begin
if serversock.Active then
begin
        bsvcontr.caption:='Server ist offline';
        serversock.active:=false;
        serversock.socket.close;
end else begin
        if serversock.Active=false then
        begin
                bsvcontr.caption:='Server ist online';
                serversock.Port:=628;
                serversock.active:=true;
                serversock.Open;
        end;
end;
end;

procedure Tform1.serversockClientWrite(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;

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;

Russel-Athletic2 28. Jul 2003 13:08

Re: socket error 10053
 
Keine Antwort?
Socket Error 10053 heißt, dass das Programm die Verbindung abgebrochen hat und folglich der Server error 10057 bekommt, da er nicht bekommen kann.

Ich hoffe auf Hilfe

Russel-Athletic2 4. Aug 2003 12:50

Re: socket error 10053
 
*nachobenschieb*

BungeeBug 4. Aug 2003 13:15

Re: socket error 10053
 
Hi,

wenn mich nicht alles täuscht is das spammen nicht ganz erlaubt oder?

und zu deinem Problem, da wirst du dir doch wohl selbst mal nen paar Gedanken machen können?! Immerhin bekommt hier niemand Geld für kompetente Antworten... so evl. hilft dir das hier
http://support.osprey.net/socket/socket.html

Russel-Athletic2 4. Aug 2003 13:26

Re: socket error 10053
 
Ne das hilft mir gar nicht, weil die Meldung sagt, dass das Programm die Verbindung unterbricht, ich weiß aber nicht wo sowas in meinem Programm vorkommt. => Ich hab mir Gedanken gemacht und auch nen Freund gefragt. Der hatte aber auch keine Lösung.
Außerdem wollte ich ja das der Thread nicht in Vergessenheit gerät. Nächste mal weiß ich es besser.

sakura 4. Aug 2003 13:28

Re: socket error 10053
 
Zitat:

Zitat von BungeeBug
wenn mich nicht alles täuscht is das spammen nicht ganz erlaubt oder?

In diesem Fall schon. Wenn man ca. einmal in der Woche versucht einen absolut unbeantworteten Thread nach oben zu bekommen.

*gnade erteilt*

...:cat:...

sakura 4. Aug 2003 13:30

Re: socket error 10053
 
Der Fehler kommt am Server oder am Client? Wann genau, bin nicht so recht schlau geworden aus obigen :-)

...:cat:...

Russel-Athletic2 4. Aug 2003 13:54

Re: socket error 10053
 
Am Client erscheint der error code 10053, was bedeutet, dass der Server die Verbindung abgebrochen hat. Darauf sagt der Server dann praktisch dass er keinen Record empfangen konnte, da der Cleint ja nicht mehr connected ist.

@Mod: Wäre nett wenn die obige Fehlerbeschreibung am Anfang meines ersten Threads gesetzt werden könnte, da ich ihn nicht mehr so editieren kann, und vielleicht der 2 Thread von mir ganz weg, wo ich die fehlermeldung erkläre.
Im Vorraus schonmal Danke.

BungeeBug 4. Aug 2003 15:30

Re: socket error 10053
 
Hi,
zu deinem Code is folgendes zusagen :)

Delphi-Quellcode:
procedure Tform1.bsvcontrClick(Sender: TObject);
begin
if serversock.Active then
begin
        bsvcontr.caption:='Server ist offline';
        serversock.active:=false;
        serversock.socket.close;
end else begin
        if serversock.Active=false then
        begin
                bsvcontr.caption:='Server ist online';
                serversock.Port:=628;
                serversock.active:=true;
                serversock.Open;
        end;
end;
end;
In dem ersten BEGIN END Block solltest du erst die Sockets schliessen dann den Socket auf false setzten :)

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;
wer soll denn hier lesen?! Der Server oder der Client? In der Procedure Liest der Server wenn der Client list ... aber was? Der Server sollte evl. besser lesen wenn der Client sendet oder?

Delphi-Quellcode:
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;
So das is alles was mit ao aufanhieb auffällt ... evl. kannst du noch nen bissel mehr Code oder gleich das ganze Prog posten dann kann man besser helfen :) und sorry wenn ich dich grad nen bissel häftig angefahren hab!!

Russel-Athletic2 4. Aug 2003 16:40

Re: socket error 10053
 
Also hier kommt der ganze Quallecode, allerdings hab ich jetzt nach dne paar Änderungen den error 10049 (Cannot assign requested address) wenn ich auf den Login Button beim Client clicke. Wegen der IP, ich hab es im netzwerk versucht, und davor it 127.0.0.1 als IP.

Server
Delphi-Quellcode:
unit main;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, FileCtrl,options,Registry,Winsock, ScktComp, IdBaseComponent,
  IdComponent, IdTCPServer, Grids, IdTCPConnection, IdTCPClient, ComCtrls,shellapi;
 type
  mainRecord = Packed Record
  what:integer;
  clientip:string[250];
  film1:string[250];
  vote:integer;
  end;
  type
  iprec = Packed Record
  clientip:string[100];
  clienthost:string[100];
  end;

  type
  Tform1 = class(TForm)
    options: TButton;
    Label1: TLabel;
    filmliste: TFileListBox;
    bsvcontr: TButton;
    Label2: TLabel;
    lIP: TLabel;
    lHostname: TLabel;
    Label3: TLabel;
    stringgrid: TStringGrid;
    Label4: TLabel;
    Button2: TButton;
    countvotebutton: TButton;
    Edit1: TEdit;
    serversock: TServerSocket;
    procedure optionsClick(Sender: TObject);
    procedure FormActivate(Sender: TObject);
    procedure serverClientRead(Sender: TObject; Socket: TCustomWinSocket);
    procedure bsvcontrClick(Sender: TObject);
    procedure countvotebuttonClick(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure serversockClientWrite(Sender: TObject;
      Socket: TCustomWinSocket);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  form1: Tform1;
  ip,host:string;
  clientsactive:integer;

implementation

{$R *.DFM}

//ip funktion

function GetComputerNetName: string;
var
  buffer: array[0..255] of char;
  size: dword;
begin
  size := 256;
  if GetComputerName(buffer, size) then
    Result := buffer
  else
    Result := '';
end;

function GetLocalIPs: string;
type
  PPInAddr = ^PInAddr;
var
  wsadata : TWSAData;
  hostinfo : PHostEnt;
  addr    : PPInAddr;
begin
  Result  := '';

  if(WSAStartUp(MAKEWORD(1,1),wsadata) = 0) then
  try
    hostinfo := gethostbyname(nil);
    if(hostinfo <> nil) then begin
      addr  := pointer(hostinfo^.h_addr_list);

      while(addr^ <> nil) do begin
        Result := Result + inet_ntoa(addr^^) + ^M^J;
        inc(addr);
      end;
    end;
  finally
    WSACleanUp;
  end;
end;

procedure Tform1.optionsClick(Sender: TObject);
begin
form2.showmodal;
end;


procedure Tform1.FormActivate(Sender: TObject);
var regist: TRegistry;
var ip: string;
begin

clientsactive:=0;

//Stringgrid schreiben
stringgrid.cells[0,0]:='Name';
stringgrid.cells[0,1]:='IP';
stringgrid.cells[0,2]:='Voted for:';

stringgrid.cells[1,0]:='Client1';

//regestry lesen
  {regist:=TRegistry.Create;
  regist.RootKey:=HKEY_CURRENT_USER;
  regist.OpenKey('Software\Reaper Productions\Vote Tool', true);
  filmliste.directory:=regist.Readstring('direct');

  regist.OpenKey('Software\Reaper Productions\Vote Tool\VLC', true);
  vlcpath:=regist.readstring('vlcpa');
  vlcname:=regist.readstring('vlcna');
  regist.free;}

filmliste.mask:='*.mpg;'+'*.mpeg;'+'*.avi;';

//ip addresse einlesen und ausgeben
ip:=GetLocalIPs;
host:=GetComputerNetName;
lhostname.caption :=host;
lip.caption:=ip;
end;

procedure Tform1.serverClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
var z:integer;
rec1:mainrecord;
  begin

//filmliste


end;

procedure Tform1.bsvcontrClick(Sender: TObject);
begin
if serversock.Active then
begin
        bsvcontr.caption:='Server ist offline';
        serversock.active:=false;
        serversock.socket.close;
end else begin
        bsvcontr.caption:='Server ist online';
        serversock.Port:=628;
        serversock.active:=true;
        serversock.Open;

end;
end;

procedure Tform1.countvotebuttonClick(Sender: TObject);
var z,max,maxnr:integer;
voted,votecomm:string;
votefeld:array[1..100] of Integer;
begin

//alles auf 0 setzen
max:=0;
maxnr:=0;
for z:=1 to 50  do
begin
        votefeld[z]:=0;
end;

//filmvotes zählen
for z:=1 to (stringgrid.colcount-1) do
begin
        inc(votefeld[(strtoint(stringgrid.cells[z,2]))]);
end;

//maximum suchen
for z:=1 to (stringgrid.colcount-1) do
begin
        if votefeld[z]>max then
        begin
                max:=votefeld[z];
                maxnr:=z;
        end;
end;
showmessage('Der gevotete Film ist' +filmliste.items[maxnr]+' ('+inttostr(maxnr)
+') mit '+inttostr(max)+' votes. Stream wird jetzt gestartet auf 239.239.239.1:1234');
filmliste.itemindex:=maxnr;

//stream starten
try
voted:=filmliste.directory+'/'+filmliste.items[maxnr];
edit1.Text:=voted;
ShellExecute(Application.Handle, 'open' ,
PChar(vlcname),
Pchar('-vvv '+voted+' --sout udp://239.239.0.1 --ttl 1'),
PChar(vlcpath), sw_ShowNormal);
except
showmessage('Befindet sich nicht auf dem Server Rechner deswegen kein stream möglich');
end;
end;

procedure Tform1.Button2Click(Sender: TObject);
var rec1:mainrecord;
begin
rec1.film1:=filmliste.items[0];
serversock.Socket.SendBuf(rec1,sizeof(rec1));
end;

procedure Tform1.serversockClientWrite(Sender: TObject;
  Socket: TCustomWinSocket);
  var rec1:iprec;
  z:integer;
  begin
  serversock.Socket.ReceiveBuf(rec1,sizeof(rec1));
  z:=1;
  //serversock.socket.ActiveConnections;
  stringgrid.cells[z,1]:=rec1.clientip;
  stringgrid.cells[z,2]:=rec1.clienthost;
end;

end.

Client
Delphi-Quellcode:
unit main;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, FileCtrl,options,Registry,Winsock, ScktComp, IdBaseComponent,
  IdComponent, IdTCPConnection, IdTCPClient, IdTCPServer, Menus;
 type
  mainRecord = Packed Record
  what:integer;
  clientip:string[250];
  film1:string[250];
  vote:integer;
  end;
  type
  iprec = Packed Record
  clientip:string[100];
  clienthost:string[100];
  end;

  type
  Tform1 = class(TForm)
    options: TButton;
    Label1: TLabel;
    filmliste: TFileListBox;
    bvote: TButton;
    Label2: TLabel;
    eip: TEdit;
    lIP: TLabel;
    lHostname: TLabel;
    Label3: TLabel;
    loginbutton: TButton;
    clientsock: TClientSocket;

    procedure optionsClick(Sender: TObject);
    procedure FormActivate(Sender: TObject);
    procedure eipChange(Sender: TObject);
    procedure bvoteClick(Sender: TObject);
    procedure loginbuttonClick(Sender: TObject);
    procedure clientsockWrite(Sender: TObject; Socket: TCustomWinSocket);
    procedure clientsockRead(Sender: TObject; Socket: TCustomWinSocket);
    procedure clientsockConnect(Sender: TObject; Socket: TCustomWinSocket);
 
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  form1: Tform1;
  ip,host:string;



implementation

{$R *.DFM}

//ip funktion

function GetComputerNetName: string;
var
  buffer: array[0..255] of char;
  size: dword;
begin
  size := 256;
  if GetComputerName(buffer, size) then
    Result := buffer
  else
    Result := '';
end;

function GetLocalIPs: string;
type
  PPInAddr = ^PInAddr;
var
  wsadata : TWSAData;
  hostinfo : PHostEnt;
  addr    : PPInAddr;
begin
  Result  := '';

  if(WSAStartUp(MAKEWORD(1,1),wsadata) = 0) then
  try
    hostinfo := gethostbyname(nil);
    if(hostinfo <> nil) then begin
      addr  := pointer(hostinfo^.h_addr_list);

      while(addr^ <> nil) do begin
        Result := Result + inet_ntoa(addr^^) + ^M^J;
        inc(addr);
      end;
    end;
  finally
    WSACleanUp;
  end;
end;


procedure Tform1.optionsClick(Sender: TObject);
begin
form2.showmodal;
end;


procedure Tform1.FormActivate(Sender: TObject);
var regist: TRegistry;
var ip: string;
begin
//regestry lesen
  {regist:=TRegistry.Create;
  regist.RootKey:=HKEY_CURRENT_USER;
  regist.OpenKey('Software\Reaper Productions\Vote Tool', true);
  filmliste.directory:=regist.Readstring('direct');


  regist.OpenKey('Software\Reaper Productions\Vote Tool\VLC', true);
  vlcpath:=regist.readstring('vlcpa');
  vlcname:=regist.readstring('vlcna');
  regist.free;}


//ip addresse einlesen und ausgeben
ip:=GetLocalIPs;
host:=GetComputerNetName;
lhostname.caption :=host;
lip.caption:=ip;
end;

procedure Tform1.eipChange(Sender: TObject);
begin
clientsock.Host:=eip.text;
end;

procedure Tform1.bvoteClick(Sender: TObject);
var rec1:mainrecord;
begin
if filmliste.itemindex = -1 then begin showmessage('einen Film auswählen'); end;
//rec bestimmen

        //what für liste senden definieren
        rec1.what:=2;

        //client daten bereitstellen
        rec1.vote:=filmliste.itemindex;

//senden
clientsock.Socket.SendBuf(rec1,sizeof(rec1));
end;

procedure Tform1.loginbuttonClick(Sender: TObject);
var rec1:iprec;
begin
clientsock.Port:=628;
clientsock.Host:='192.168.0.1';
clientsock.Active:=true;
clientsock.open;

end;

procedure Tform1.clientsockWrite(Sender: TObject;
  Socket: TCustomWinSocket);
var rec1:mainrecord;
  begin
{filmliste.Items.clear;
        //lesen und in liste schreiben
        clientsock.Socket.ReceiveBuf(rec1,SizeOf(rec1));
        filmliste.Items.Add(rec1.film1); }
end;

procedure Tform1.clientsockRead(Sender: TObject; Socket: TCustomWinSocket);
var rec1:mainrecord;
begin
showmessage('hallo');
end;

procedure Tform1.clientsockConnect(Sender: TObject;
  Socket: TCustomWinSocket);
var rec1:iprec;
begin
rec1.clientip:=ip;
rec1.clienthost:=host;
clientsock.Socket.SendBuf(rec1,sizeof(rec1));
end;

end.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:41 Uhr.

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