1,如何获取客户端的IP地址。
2,我们一般的做法是服务器端侦听,客户端连接,客户端很容易判断是否连接成功,服务器端如何判别客户是否已连接。
我的客户端总是要掉网,我是搞移动开发的。惭愧呀。白搞了4年VC了。

解决方案 »

  1.   

    1、getpeername
    2、客户端连接时,会有 FD_ACCEPT 事件。
      

  2.   

    连接时就知道。
    virtual BOOL Accept( CAsyncSocket& rConnectedSocket, SOCKADDR* lpSockAddr = NULL, int* lpSockAddrLen = NULL );
    lpSockAddr 就是客户端的地址结构,里面有客户端的IP。accept会使侦听线程挂起,如果线程回复就是客户连接了。
      

  3.   

    你是不是说你想随时知道某一个客户端是否处于连接状态?不知道你是socket API写的还是CAsyncSocket,总之,当有客户端主动断开时,服务器端会有事件FD_CLOSE。然后你把这个连接的socket对象杀掉就行了(对于CAsyncSocket MFC已经封装好了处理函数OnClose)。 同理,当有客户端的连接请求时,同样会有事件FD_ACCEPT,这时新建一个socket对象,进行数据传输。你想知道的是不是这个?
      

  4.   

    楼上很多方法都可以判断到客户端正常断开连接。如果碰到异常断开,比如网线断开,这时候底层不一定能够及时判断到。
    可以做一些“心跳包”的协议来检测客户端是否工作正常。
    recv返回0一般表示已经断开了。
      

  5.   

    首先在这里谢谢大家。回mensong(吉他乐手)
    服务器端事件FD_CLOSE,是服务器自己判断客户端掉线,还是需要客户端发什末消息。我是针对手机用户的他一旦不在网内,或者按了关机键,系统会优先于程序来响应,在服务器看来程序不会任何正常结束的信息,这样我的服务器在给他发信就导致了服务器程序崩溃。请lhj(努力加油)把“心跳包”的协议来检测客户端说的详细一些。