异步套接字编程问题,为什么在虚拟机中运行程序,不能首先向实体机运行的程序发送消息?

首先声明我是个新手,在学习孙鑫老师的MFC视频网络编程当中,我按视频中讲述的用多线程和采用异步套接字编程分别编写了一个聊天室(chat)程序,编写完成后,测试运行,在本地... 首先声明我是个新手,在学习孙鑫老师的MFC视频网络编程当中,我按视频中讲述的用多线程和采用异步套接字编程分别编写了一个聊天室(chat)程序,编写完成后,测试运行,在本地测试,也就是在IP地址框中输入本地IP 127.0.0.1时,运行没有任何问题,但是我用虚拟机测试时却出现了问题。测试如下:我在实体机和虚拟机分别运行chat程序,在实体机上的程序的IP地址框中填写虚拟机的IP地址,然后向其发送消息,然而在虚拟机上的程序却没能接收到消息,在虚拟机中的接收消息函数中设置断点,发现windows根本没有调用这个函数,然而当我在虚拟机中的程序的IP地址框中输入实体机的IP地址,向其发送消息时,实体机上运行的程序就能收到消息,这时再通过实体机上的程序向虚拟机上的程序发送消息,消息就能被收到了。但是在隔一段时间不退出程序的情况下,先用实体机向虚拟机发送消息,又会出现上述部问题,请问这是为什么呢?

这是接收函数代码:DWORD WINAPI CChatDlg::RecvProc(LPVOID lpParameter){SOCKET sock=((RECVPARAM*)lpParameter)->sock;HWND hwnd=((RECVPARAM*)lpParameter)->hwnd;delete lpParameter; //视频讲述时,遗忘了释放内存的操作。sunxinSOCKADDR_IN addrFrom;int len=sizeof(SOCKADDR);char recvBuf[200];char tempBuf[300];int retval;while(TRUE){retval=recvfrom(sock,recvBuf,200,0,(SOCKADDR*)&addrFrom,&len);if(SOCKET_ERROR==retval)break;sprintf(tempBuf,"%s说: %s",inet_ntoa(addrFrom.sin_addr),recvBuf);::PostMessage(hwnd,WM_RECVDATA,0,(LPARAM)tempBuf);}return 0;}下面是发送函数代码:void CChatDlg::OnBtnSend() {// TODO: Add your control notification handler code hereDWORD dwIP;((CIPAddressCtrl*)GetDlgItem(IDC_IPADDRESS1))->GetAddress(dwIP);SOCKADDR_IN addrTo;addrTo.sin_family=AF_INET;addrTo.sin_port=htons(6000);addrTo.sin_addr.S_un.S_addr=htonl(dwIP);CString strSend;GetDlgItemText(IDC_EDIT_SEND,strSend);sendto(m_socket,strSend,strSend.GetLength()+1,0,(SOCKADDR*)&addrTo,sizeof(SOCKADDR));SetDlgItemText(IDC_EDIT_SEND,"");}
展开
 我来答
花花浪客
2013-08-26 · TA获得超过2069个赞
知道小有建树答主
回答量:792
采纳率:100%
帮助的人:712万
展开全部
你的虚拟机里面有防火墙之类的东西吗?比如windows防火墙,默认是开启的,在防火墙开启的情况下,你想要连接你的6000端口是连不上的
追问

刚才将虚拟机里的防火墙关闭了,果然测试成功,谢谢。

补充下,我的实体机装的Win7,虚拟机上装的XP,在实体机上装有杀毒软件,虚拟机上什么都没装,防火墙倒是默认打开的,但是我也勾选了当Windows阻止程序时通知我,在我发送消息时,为什么Windows什么也没做,根本没提示我是否允许程序访问网络?这是为什么呢?

追答
因为这个阻止的是端口不是程序。你看你的防火墙设置有两项,一项是“添加程序”,一项是“添加端口”,如果是不在白名单的程序访问网络,那么会有提示;但是其他机器试图连接不在白名单里面的端口时不会有通知。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式