udp为什么收不到对方发的数据?

门吹西风 2004-12-23 03:00:20
SOCKADDR_IN s_in;

if ( (hUdpServerSocket = socket(AF_INET, SOCK_DGRAM, 0))== INVALID_SOCKET )
{
nSocketError = WSAGetLastError();
return FALSE ;
}
s_in.sin_addr.S_un.S_addr = inet_addr("192.168.42.99");//INADDR_ANY;
s_in.sin_family = AF_INET ;
s_in.sin_port = htons(port) ;
if ( bind(hUdpServerSocket, (SOCKADDR*)&s_in, sizeof(SOCKADDR_IN))== SOCKET_ERROR )
{
closesocket(hUdpServerSocket);
return FALSE ;
}
while ( 1 )
{
int nReadSocket = 0 ;
fd_set sockSet;
struct timeval interval;

FD_ZERO(&sockSet);
FD_SET(hUdpSocket, &sockSet);
interval.tv_sec = iTimeOut;
interval.tv_usec = (iTimeOut > 0) ? 0 : 10;
nReadSocket = select(0, &sockSet, NULL, NULL, &interval);
if ( nReadSocket == 1 )
recvfrom(...) ;
}
现在是对方发了很多数据, 这里的nReadSocket总是为0,郁闷ing....
...全文
223 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
门吹西风 2004-12-23
  • 打赏
  • 举报
回复
问题找到了. 不是你们说的原因,谢谢捧场
nuaawenlin 2004-12-23
  • 打赏
  • 举报
回复
设置套接字的广播属性
门吹西风 2004-12-23
  • 打赏
  • 举报
回复
if ( (hUpdSocket = socket(AF_INET, SOCK_DGRAM, 0))== INVALID_SOCKET )
{
nSocketError = WSAGetLastError();
return FALSE ;
}
// 设置成异步模式
ULONG IOParam = 1;
if ( ioctlsocket(hUdpSocket, FIONBIO, &IOParam) != 0 )
{
CloseSocket(hUdpSocket);
nSocketError = WSAGetLastError();
return FALSE;
}
SOCKADDR_IN sockAddr;
int iSendStatus=0;

nSendBytes = 0 ;
sockAddr.sin_addr.S_un.S_addr = inet_addr("192.168.42.99");
sockAddr.sin_port = htons(9009);
sockAddr.sin_family = AF_INET;
while ( nSendBytes < length)
{
if ( (iSendStatus = sendto(hUdpSocket, buffer + nSendBytes, length - nSendBytes, 0, (SOCKADDR*)&sockAddr, sizeof(sockAddr) )) <= 0 )
{
nSocketError = WSAGetLastError();
return -1 ;
} nSendBytes += iSendStatus ;
if ( nSendBytes >= length )
break;
}
hjunxu 2004-12-23
  • 打赏
  • 举报
回复
你先不要用select 直接recvfrom试试看?
门吹西风 2004-12-23
  • 打赏
  • 举报
回复
udp不需要listen吧
hjunxu 2004-12-23
  • 打赏
  • 举报
回复
interval.tv_usec = (iTimeOut > 0) ? 0 : 10;
这一句好奇怪啊,如果iTimerout > 0 就设超时为0否则为10 ?
nuaawenlin 2004-12-23
  • 打赏
  • 举报
回复
对方是不是向该端口发送数据呀?或者你的Recvfrom()有没有从对方的端口取数据?
hjunxu 2004-12-23
  • 打赏
  • 举报
回复

s_in.sin_addr.S_un.S_addr = inet_addr("192.168.42.99");//INADDR_ANY;
换成
s_in.sin_addr.S_un.S_addr = inet_addr("INADDR_ANY");//INADDR_ANY;
试试

danyueer 2004-12-23
  • 打赏
  • 举报
回复
你的Socket调用listen了没有?

18,356

社区成员

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

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