procedure   tcpclient;
var  wsadada:wsadata ;
     tclient:TSocket ;
     i:Integer;
     socketversion:Word ;
     serveaddr:sockaddr_in ;
     buffer:array [0..255] of Char;
     recichar:array [0..255] of Char;
     ip:string;
begin
     
      WSAStartup(MakeWord(2,2),wsadada );
      tclient :=socket(AF_INET ,SOCK_STREAM ,IPPROTO_ip );
     if tclient = INVALID_socket then
     ShowMessage('error');
     serveaddr.sin_family :=aF_INET ;
     serveaddr .sin_port :=htonl(7002); 
     serveaddr .sin_addr.S_addr :=inet_addr('127.0.0.1');
      [color=#FF0000]if connect(tclient,serveaddr,SizeOf(serveaddr) ) =SOCKET_ERROR  then
    begin
       MessageBox(Application.Handle,'error','error',MB_OK or MB_ICONERROR ) ;
       closesocket(tclient );
    end;
    为什么会执行if语句啊,,按理来说我没有写错啊    

解决方案 »

  1.   

    你用的不是WINSOCKET2?2的话这里要加地址符。
    connect(tclient,@serveaddr,SizeOf(serveaddr) ) 另,是不是你的服务器没开启?
      

  2.   

    if connect(tclient,serveaddr,SizeOf(serveaddr) ) =SOCKET_ERROR then begin
      S := SysErrorMessage(WSAGetLastError());
      MessageBox(Application.Handle,PChar(S),'error',MB_OK or MB_ICONERROR );
    end;
    把错误信息打出来看看.
      

  3.   

    htonl(7002); ->改成htons试下。
      

  4.   

    是2.2的版本,还有就是应该不能加@,参数不对,应该是你说的服务器没有开启。按照kiboisme
    (蓝色光芒)的方法,我得到了'由于计算机积极拒绝,无法连接'的错误提示,请问该怎么解决这个问题,我是win7的电脑,应该到哪里去打开本机的服务器。
      

  5.   

    unit WinSock2;
    if connect(FSocket, @saddrin, SizeOf(saddrin))=Socket_Error then
    ........  
      

  6.   

    解决了,是我没有运行服务端,不好意思,这次帮我搞懂了不少的基础知识,特别谢谢”case5166“和kiboisme
    (蓝色光芒)两位的帮助,谢谢啦。