怎么才能用winsock的connect函数建立到163或其他站点连接?我在程序中connect时总是返回负一,用WSAGETLASTERR()返回的值也总是等于1,不知道哪里设置的不对,请大虾指导,非常感谢!!问题解决送分100

解决方案 »

  1.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      wsData:WSAData;
      sktversion:word;
      cliadd:sockaddr_in;
      rtnvalue:longint;
      srvadd:sockaddr_in;
      cliaddlen:integer;
      serverip:string;
      intErr:integer;
    begin  sktversion:=MAKEWORD(2,2);
      if (WSAStartup(sktversion,wsData)<>0) then
         raise exception.Create('winsock version Error');
      serverip:=getserverip(servername.Text);
      if sizeof(serverip)=0 then
        begin
          raise exception.Create('找不到指定的服务器');
          exit;
        end;
      cliskt:=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
      if cliskt=INVALID_SOCKET then
        begin
         showmessage('socket');
        end;
      setsockopt(cliskt,IPProto_TCP,so_keepalive,'1',1);
      //setsockopt(cliskt,ipproto_tcp,tcp_nodelay,'1',1);  cliadd.sin_family:=AF_INET;
      cliadd.sin_addr.S_addr:=INADDR_ANY;
      cliadd.sin_port:=988;
      cliaddlen:=sizeof(cliadd);
      rtnvalue:=bind(cliskt,cliadd,cliaddlen);
      if rtnvalue=SOCKET_ERROR then
         showmessage('bind');
      srvadd.sin_family:=AF_INET;
      srvadd.sin_addr.S_addr:=htonl(inet_addr(PAnsiChar(serverip)));
      srvadd.sin_port:=80;
      rtnvalue:=connect(cliskt,srvadd,sizeof(srvadd));
      if rtnvalue=SOCKET_ERROR then
         begin
             //raise exception.Create('连接失败!');
             showmessage('连接失败!');
             interr:=90;
             intErr:=winsock.WSAGetLastError();
             case intErr of
                .....{处理错误}
             end;