小弟在同一台机器上跑如下的UDP广播包发送程序和接收程序,结果接收端怎么也收不到~
如果将接收端放置另一台机器上,一切正常~ 请各位给出意见,谢谢!!!// 发送端:
SOCKET sockClient = socket(AF_INET, SOCK_DGRAM, 0);
if (sockClient == INVALID_SOCKET)
{
return;
}
BOOL yes = TRUE;
int ret = setsockopt(sockClient, SOL_SOCKET, SO_BROADCAST, (char FAR *)&yes, sizeof(BOOL));
if (ret == SOCKET_ERROR)
{
return;
}
SOCKADDR_IN addrSrv;
addrSrv.sin_family = AF_INET;
addrSrv.sin_port = htons(56789);
addrSrv.sin_addr.S_un.S_addr = htonl(INADDR_BROADCAST); char recvBuf[100];
char sendBuf[100];
int len = sizeof(SOCKADDR);
while(1)
{
gets(sendBuf);
if (sendto(sockClient, sendBuf, strlen(sendBuf)+1, 0, (SOCKADDR*)&addrSrv, len) == SOCKET_ERROR)
{
return;
}
} closesocket(sockClient);
WSACleanup();
// 接收端
SOCKET sockSrv = socket(AF_INET, SOCK_DGRAM, 0);
if (sockSrv == INVALID_SOCKET)
{
return;
} BOOL yes = TRUE;
int ret = setsockopt(sockSrv, SOL_SOCKET, SO_BROADCAST, (char FAR *)&yes, sizeof(BOOL));
if (ret == SOCKET_ERROR)
{
return;
} SOCKADDR_IN addrSrv;
addrSrv.sin_family = AF_INET;
addrSrv.sin_port = htons(56789);
addrSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY); if (bind(sockSrv, (SOCKADDR*)&addrSrv, sizeof(SOCKADDR)) == SOCKET_ERROR)
{
return;
} char recvBuf[100];
char sendBuf[100];
SOCKADDR_IN addrClient;
memset(&addrClient, 0, sizeof(addrClient));
int len = sizeof(SOCKADDR); while (1)
{
if (recvfrom(sockSrv, recvBuf, 100, 0, (SOCKADDR*)&addrClient, &len) == SOCKET_ERROR)
{
return;
} printf("%s %s\n", inet_ntoa(addrClient.sin_addr), recvBuf); }
closesocket(sockSrv);
WSACleanup();
如果将接收端放置另一台机器上,一切正常~ 请各位给出意见,谢谢!!!// 发送端:
SOCKET sockClient = socket(AF_INET, SOCK_DGRAM, 0);
if (sockClient == INVALID_SOCKET)
{
return;
}
BOOL yes = TRUE;
int ret = setsockopt(sockClient, SOL_SOCKET, SO_BROADCAST, (char FAR *)&yes, sizeof(BOOL));
if (ret == SOCKET_ERROR)
{
return;
}
SOCKADDR_IN addrSrv;
addrSrv.sin_family = AF_INET;
addrSrv.sin_port = htons(56789);
addrSrv.sin_addr.S_un.S_addr = htonl(INADDR_BROADCAST); char recvBuf[100];
char sendBuf[100];
int len = sizeof(SOCKADDR);
while(1)
{
gets(sendBuf);
if (sendto(sockClient, sendBuf, strlen(sendBuf)+1, 0, (SOCKADDR*)&addrSrv, len) == SOCKET_ERROR)
{
return;
}
} closesocket(sockClient);
WSACleanup();
// 接收端
SOCKET sockSrv = socket(AF_INET, SOCK_DGRAM, 0);
if (sockSrv == INVALID_SOCKET)
{
return;
} BOOL yes = TRUE;
int ret = setsockopt(sockSrv, SOL_SOCKET, SO_BROADCAST, (char FAR *)&yes, sizeof(BOOL));
if (ret == SOCKET_ERROR)
{
return;
} SOCKADDR_IN addrSrv;
addrSrv.sin_family = AF_INET;
addrSrv.sin_port = htons(56789);
addrSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY); if (bind(sockSrv, (SOCKADDR*)&addrSrv, sizeof(SOCKADDR)) == SOCKET_ERROR)
{
return;
} char recvBuf[100];
char sendBuf[100];
SOCKADDR_IN addrClient;
memset(&addrClient, 0, sizeof(addrClient));
int len = sizeof(SOCKADDR); while (1)
{
if (recvfrom(sockSrv, recvBuf, 100, 0, (SOCKADDR*)&addrClient, &len) == SOCKET_ERROR)
{
return;
} printf("%s %s\n", inet_ntoa(addrClient.sin_addr), recvBuf); }
closesocket(sockSrv);
WSACleanup();
解决方案 »
- 工控系统流程问题
- 在MFC中如何从二进制数据中显示图片?
- 如何取得列表控制的标题文字?
- 菜单上的命令消息改掉用4个主程序类中的那个类
- 用ODBC的方式访问数据库做的软件在其它的计算机上运行的时候要重新配置ODBC源,用什么方法可以不用重新配置呢?
- 如何将treeview 和 imagelist 关联起来?
- 串口ReadFile()返回值
- 有关用InstallShield打包的问题,请各位大虾帮忙。100分奉献!!!
- 将XML格式串转为数组
- 关于游戏汉化(拦截API)
- 请问我的ResourceView打不开了,提示说Load Failed ,怎么解决这个问题啊?
- 求助搞一个移动硬盘能跟电脑中文件同步的软件
int nLoop = 1;
nRet = WSAIoctl(
g_socketLocal,
SIO_MULTIPOINT_LOOPBACK,
&nLoop,
sizeof(nLoop),
NULL,
0,
(unsigned long *)&cbRet,
NULL,
NULL);
邮箱:[email protected]
而在0.6的机子上跑send.exe的话 俩机子都能收到数据~~~
这是怎么回事呢??????