我想从一个proto数字得到相关协议,用winsock的getprotobynumber函数,貌似每次都返回nil,
具体怎么实现?谢谢!var
  num: integer;
  s: String;
  pPE : PProtoEnt;
begin
  pPE:=Winsock.getprotobynumber(6);
  if pPE=nil then
    num:=winsock.WSAGetLastError;
  s:=pPE.p_name;
end;每次都是10093错误,汗

解决方案 »

  1.   

    WSAStartup,使用socket时,需要先初始化
      

  2.   

    应用程序没有调用   WSAStartup,或者   WSAStartup   失败。
    http://topic.csdn.net/t/20060712/15/4875955.html
      

  3.   

    下面是WSAStartup用法:var 
        WSAData:   TWSAData; 
    begin 
        if   WSAStartup($101,   WSAData)   =   0   then 
        begin 
            //Do   actual   operations   here 
            WSACleanup; 
        end; 
    end; 
      

  4.   


    var
      num: integer;
      s: String;
      pPE : PProtoEnt;
      WSAData:   TWSAData;                  //
    begin
      WSAStartup($101,   WSAData);          //初始化
      pPE:=Winsock.getprotobynumber(6);
      if pPE=nil then
      num:=winsock.WSAGetLastError;
      s:=pPE.p_name; 
    end;
      

  5.   

    谢谢各位procedure TForm1.Button1Click(Sender: TObject);
    var
      s: String;
      pPE : PProtoEnt;
      LData: TWSAData;
      LError: DWORD;
    begin
      LError:=WSAStartup($101, LData);
      if LError<>0 then
      begin
        Exit;
      end;
      pPE:=Winsock.getprotobynumber(17);
      s:=pPE.p_name;
      pPE:=Winsock.getprotobynumber(6);
      s:=pPE.p_name;
      WSACleanup;
    end;可以工作了。