昨天还好好的程序,今天不知为什么不行了......connect第一次连接一个端口时正常,没接上总是-1,如果成功连上一次,第二次连总是返回0,不论是否成功每个端口只有一次正常连接,sinffer 发现除了成功连接的以外,更本没有包发出去,郁闷了.用了以下方法1:
      closesocket(s);   // 释放Windows Socket DLL的相关资源
      WSACleanup();2:重启
代码如下,这只是其中一个,我不知试了多少代码了,都不行.....WSADATA              wsaData;
   SOCKET               s;
   SOCKADDR_IN          ServerAddr;
   int                  Port = 100;
   u_long i;   
   //初始化Windows Socket 2.2   WSAStartup(MAKEWORD(2,2), &wsaData);
   
   // 创建一个新的Socket来连接服务器
 
      s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
   
   // 填写客户端地址信息
   // 端口为5150
   // 服务器IP地址为"136.149.3.29",注意使用inet_addr将IP地址转换为网络格式      ServerAddr.sin_family = AF_INET;
      ServerAddr.sin_port = htons(Port);    
      ServerAddr.sin_addr.s_addr = inet_addr("192.168.18.4");   // 向服务器发出连接请求
  SOCKET               conn;
while(1)
{
      conn=connect(s, (SOCKADDR *) &ServerAddr, sizeof(ServerAddr)); 
      
  if(conn==0)
{ printf("conn");
  break;
}
}

解决方案 »

  1.   

    你放在while里面,当然是这样了,既然已经connect成功了,再不停的连服务器,意义何在呢
      

  2.   

    If no error occurs, this function returns zero. If an error occurs, it returns SOCKET_ERROR, and a specific error code can be retrieved by calling WSAGetLastError.就是说反回0就是没有错误发生。否则反回一个SOCKET_ERROR,并且你可以用WSAGetLastError来获得具体的错误代码。
      

  3.   

    “每个端口只有一次正常连接,sinffer 发现除了成功连接的以外,更本没有包发出去,”------------
    。难道一个端口可以同时多次连接不成?
      

  4.   

    connect不能进行多次连接,你又不是写服务端的accept,一次就好了。
      

  5.   

    if(conn==0)
    { printf("conn");
      break;
    }返回值为0就退出啊!!晕死,都看什么了.......找到原因了,可问题还没有解决,我现在可以用telnet所有IP的25,80,等我用过的端口,就是说我程序是正常的,对winsock来说,是连上了...其实更本没连上.......可为什么出现这种问题啊!!!!!!!!系统问题,可还是不知原因!
      

  6.   

    GetLastError返回的是连接正常,可以使用了.