最近老师叫我们编写一个局域网聊天工具;
我已经做了主要的代码,能互相通信,现在面临的问题是无法实现以下的功能:(1)屏幕上显示消息内容时,如果消息来自于客户机,在每一条消息前附上消息源的机器名称。如果消息来自于服务器,则在消息前附上“[server]”.(2)当一个客户进入聊天室的时候,要求在其他客户机的屏幕上显示“××进入聊天室了”。当一个客户离开聊天室的时候,要求在其他客户机的屏幕上显示“××离开聊天室了”。由于是用到了MFC不方便贴代码,我就把我的代码上传到了我的个人主页,地址:http://www.815moon.cn/chatdemo.rar还请各位帮帮忙,十分感激
我已经做了主要的代码,能互相通信,现在面临的问题是无法实现以下的功能:(1)屏幕上显示消息内容时,如果消息来自于客户机,在每一条消息前附上消息源的机器名称。如果消息来自于服务器,则在消息前附上“[server]”.(2)当一个客户进入聊天室的时候,要求在其他客户机的屏幕上显示“××进入聊天室了”。当一个客户离开聊天室的时候,要求在其他客户机的屏幕上显示“××离开聊天室了”。由于是用到了MFC不方便贴代码,我就把我的代码上传到了我的个人主页,地址:http://www.815moon.cn/chatdemo.rar还请各位帮帮忙,十分感激
或者accept的时候,不传入第2,3各参数,函数返回时,用返回的套接字调用getpeername来取得客户端ip和端口
得到ip以后,可以调用gethostbyaddr函数来获得该ip对应的名字
如果要区分从本机上发起的连接和其他机器发起的连接,就需要用GetAdaptersInfo(程序初始化时保存本机所有网卡ip地址)
2.很简单啊,要看你用的是什么i/o模型了,如果使用WSAAsyncSelect,直接捕获fd_close不就可以了吗?
struct sockaddr_in sa;
int len = sizeof(sa);
getpeername(pUser->nSocket, (struct sockaddr *)&sa, &len);
inet_ntoa(sa.sin_addr);//对方IP
你的这个功能并不难于实现。1楼已经帮你解决大部分了。