最近老师叫我们编写一个局域网聊天工具;
我已经做了主要的代码,能互相通信,现在面临的问题是无法实现以下的功能:(1)屏幕上显示消息内容时,如果消息来自于客户机,在每一条消息前附上消息源的机器名称。如果消息来自于服务器,则在消息前附上“[server]”.(2)当一个客户进入聊天室的时候,要求在其他客户机的屏幕上显示“××进入聊天室了”。当一个客户离开聊天室的时候,要求在其他客户机的屏幕上显示“××离开聊天室了”。由于是用到了MFC不方便贴代码,我就把我的代码上传到了我的个人主页,地址:http://www.815moon.cn/chatdemo.rar还请各位帮帮忙,十分感激

解决方案 »

  1.   

    1.在accept的时候,传入第2,3个参数,函数返回时,第2个参数就是客户端得ip和端口号。
       或者accept的时候,不传入第2,3各参数,函数返回时,用返回的套接字调用getpeername来取得客户端ip和端口
       得到ip以后,可以调用gethostbyaddr函数来获得该ip对应的名字
       如果要区分从本机上发起的连接和其他机器发起的连接,就需要用GetAdaptersInfo(程序初始化时保存本机所有网卡ip地址)
     
     2.很简单啊,要看你用的是什么i/o模型了,如果使用WSAAsyncSelect,直接捕获fd_close不就可以了吗?
      

  2.   

    //根据SOCKET 得到 IP
    struct   sockaddr_in   sa;  
            int   len   =   sizeof(sa);
    getpeername(pUser->nSocket,   (struct   sockaddr   *)&sa,   &len); 
    inet_ntoa(sa.sin_addr);//对方IP
      

  3.   

    仔细看看socket API 函数,里面有详细信息。
    你的这个功能并不难于实现。1楼已经帮你解决大部分了。