为什么在广播后,自己连续收到了四次消息

askters 2012-02-08 10:18:33
代码:

#include <conio.h>

#include <iostream>

#include <winsock2.h>

#pragma comment( lib, "ws2_32.lib" )

#define BUF_SIZE 1024

using namespace std;

int main( int args, char *argv[] )
{
WSAData wsaData;
int nResult = WSAStartup( MAKEWORD( 2, 2 ), &wsaData );

if( nResult != 0 )
{
cout<< "WSAStartup failed!" <<endl;
return -1;
}

SOCKET udp_sd = socket( AF_INET, SOCK_DGRAM, 0 );

if( INVALID_SOCKET == udp_sd )
{
cout<< "socket failed!" <<endl;
WSACleanup();

return -1;
}

sockaddr_in addr;
addr.sin_family = AF_INET;
addr.sin_port = htons( 5300 );
addr.sin_addr.s_addr = INADDR_ANY;

int nlength = sizeof( sockaddr_in );

nResult = bind( udp_sd, (sockaddr *)&addr, nlength );
if( 0 != nResult )
{
cout<< "Bind 127.0.0.1:5300 Failed!" <<endl;

closesocket( udp_sd );
WSACleanup();

return -1;
}

bool optval = true;
int optlen = sizeof(bool);
unsigned long nValue = 1;

setsockopt( udp_sd, SOL_SOCKET, SO_BROADCAST, (char *)&optval, optlen );
ioctlsocket( udp_sd, FIONBIO, (u_long *)&nValue );

char buf[BUF_SIZE] = { 0 };

sockaddr_in addr_dest;
addr_dest.sin_family = AF_INET;
addr_dest.sin_port = htons( 5300 );
addr_dest.sin_addr.s_addr = INADDR_BROADCAST;

sockaddr_in addr_src;

bool bExit = false;
int nCount = 0;

while( !bExit )
{
if( _kbhit() )
{
gets( buf );

if( stricmp( buf, "quit") == 0 ||
stricmp( buf, "exit") == 0 )
{
bExit = true;
}
else
{
sendto( udp_sd, buf, strlen(buf), 0, (sockaddr *)&addr_dest, nlength );
}
}

memset( buf, 0, BUF_SIZE);
int nRecv = recvfrom( udp_sd, buf, BUF_SIZE, 0, (LPSOCKADDR)&addr_src, &nlength );

if( nRecv > 0 )
{
++nCount;
cout<< inet_ntoa( addr_src.sin_addr ) << " say : " << buf <<endl;

cout<< nCount <<endl;
}

Sleep( 1000 );
}

shutdown( udp_sd, FD_CLOSE );
closesocket( udp_sd );

return 0;
}

运行结果:输入消息回车后,打印出来最后nCount=4,对四次打印出来的消息都是一样。

求高手解答为什么会出现这样的结果?谢谢!
...全文
82 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
askters 2012-02-08
  • 打赏
  • 举报
回复
哦,应该是装了2个虚拟机的问题,抓包看了下mac地址,3个mac地址都对应上了,那多出来的一个是从那冒出来的?
guangmingdeshenju 2012-02-08
  • 打赏
  • 举报
回复
抓包调试。。。看看返回的数据包 原ip mac是什么。。。
fly4free 2012-02-08
  • 打赏
  • 举报
回复
你有四个网络适配器 设备?

不懂,路过。

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧