服务器端是这样
listen(listensock   ,5);
acceptsock = accept(listensock,.....);
if(acceptsock!=INVALID_SOCKET)
MessageBox("接收到一个连接");
没有循环accepet,也就是只能accept一个客户端。但这样的话我第一个客户端connect成功后,再开第二个客户端connect不会返回SOCKET_ERROR,应该是connect成功了,只是服务器这边accept没有被调用如果把上面加一行,改成这样
listen(listensock   ,5);
acceptsock = accept(listensock,.....);
if(acceptsock!=INVALID_SOCKET)
MessageBox("接收到一个连接");
closesocket(listensock);  //也就是把监听用的socket关闭了
这样的话第二个客户端再去connect才会返回SOCKET_ERROR我想问的是就第一种情况而言,或者是在不管服务器端是怎么样的情况下。在客户端有没有办法判断是否"真正连接"上了服务器。

解决方案 »

  1.   

    accept接收连接后,把连接的socket对象跟对应客户端维护一个链表...
      

  2.   

    单纯从socket角度是没办法区分的,但是我们使用socket都会有应用,从应用层的角度来看还是有办法,比如客户端连接上以后可以要求服务器回应数据,没有回应的话说明服务器可能没有accept
      

  3.   

    http://hereson.javaeye.com/blog/198771
      

  4.   

    没有循环accepet,也就是只能accept一个客户端。但这样的话我第一个客户端connect成功后,再开第二个客户端connect不会返回SOCKET_ERROR,应该是connect成功了,只是服务器这边accept没有被调用
    --------------------------------------------------------------------------
    你的服务器没有accept,你怎么保证你的客户端connect是成功了???
      

  5.   

    你服务器端ACCEPT成功后再发一个消息给客户端啊,客户端要是没收到就是没连接成功。也就是握手