你那是Socket几点,是不是delphi5,怎么改,complie都不过
那些结构是你定义的,那WinSock.pas不是有吗。

解决方案 »

  1.   

    我改了一下,能通过,可能是由于你在TSockAddrIn结构赋值的时候可能出错了。uses
      WinSock, ScktComp;function WinSockInit(NetworkNum:longword): Integer;
    var
      WSAData: TWSAData;
      ErrorCode: Integer;
      FSocket: TSocket;
      FLinger: TLinger;
      FAddr: TSockAddrIn;
      SockNum: Integer;
    begin
      SockNum := $5201;
    {  VersionReqd:=$0101;}
      Result := -1;
      ErrorCode := WSAStartup($0101, WSAData);
      if ErrorCode <> 0 then
        raise Exception.Create('Window Socket Error On API:WSAStartup');
      if NetworkNum = 0 then
        FSocket := socket(AF_INET, SOCK_DGRAM, 0) else
        FSocket := socket(AF_IPX, SOCK_DGRAM, IPPROTO_IP);
      if FSocket = INVALID_SOCKET then
      begin
        WSACleanup;
        ShowMessage('socket error');
        Exit;
      end;
      FLinger.l_onoff := 1;
      FLinger.l_linger := 0; { 允许接收或发送广播数据 }
      setsockopt(FSocket, SOL_SOCKET, SO_BROADCAST, PChar(@FLinger), SizeOf(FLinger));
      if NetworkNum = 0 then
      begin
        FAddr.sin_family := AF_INET;
        FAddr.sin_port := ntohs(SockNum);
        FAddr.sin_addr.s_addr := INADDR_ANY;
        ErrorCode := bind(FSocket, FAddr, SizeOf(FAddr));
      end else
      begin
        FAddr.sin_family := AF_IPX;
        FAddr.sin_port := ntohs(SockNum);
        FAddr.sin_addr.s_addr := INADDR_ANY;
        ErrorCode := bind(FSocket, FAddr, SizeOf(FAddr));
      end;
      if ErrorCode <> 0 then
      begin
        ShowMessage('Window Socket Error On API: bind');
        WSACleanup;
        Exit;
      end;
     { Stream:=TMemoryStream.Create;
      Stream.SetSize(FILELEN);
      squence:=0; }
      Result := 0;
    end;procedure TForm1.BitBtn1Click(Sender: TObject);
    begin//WinSockInit(1) then Socket Error
      if WinSockInit(0) = 0 then ShowMessage('success') else showmessage('fail')
    end;
      

  2.   

    因为ping SockAddr就不通 试