udp:连接超时

smile0403 2007-05-18 03:26:27
//UDP.C
int UDPOpen (int port, int *socketHandle)
{
SOCKADDR_IN sin;
WORD wVersionRequested;
WSADATA wsaData;
int err, t = 1;
unsigned long u = 0;

wVersionRequested = MAKEWORD(1, 1);
if((err = WSAStartup(wVersionRequested, &wsaData)) != 0)
{
WSACleanup();
return err;
}
// Open a socket
*socketHandle = socket(AF_INET, SOCK_DGRAM, 0);
if(*socketHandle == INVALID_SOCKET)
{
err = WSAGetLastError();
closesocket(*socketHandle);
WSACleanup();
return err;
}
// bind the socket to an Address and Port
sin.sin_family = AF_INET;
sin.sin_addr.s_addr = INADDR_ANY;
sin.sin_port = htons(port);
if((err = bind(*socketHandle, (LPSOCKADDR)&sin, sizeof(sin))) != 0)
{
err = WSAGetLastError();
closesocket(*socketHandle);
WSACleanup();
return err;
}
// Set the socket to Blocking I/O
ioctlsocket(*socketHandle, FIONBIO, &u);
// Set the socket to Broadcast
setsockopt(*socketHandle, SOL_SOCKET, SO_BROADCAST, (char*)&t, sizeof(int));
return 0;
}

int UDPRead (int socketHandle, void *data, int maxSize, int timeout)
{
int fromSize;
SOCKADDR_IN sin;

fromSize = sizeof(sin);
//sin.sin_addr.s_addr = inet_addr("218.194.60.224");
// Set the receive timeout period to the one specified by the timeout parameter.
setsockopt(socketHandle, SOL_SOCKET, SO_RCVTIMEO, (char*)&timeout, sizeof(int));
// Recieve the data on the port.
if(recvfrom(socketHandle, data, maxSize, 0, (LPSOCKADDR)&sin, &fromSize) < 0)
return WSAGetLastError();
return 0;
}

int UDPClose (int socketHandle)
{
// Close the socket
closesocket(socketHandle);
return 0;
}

char *UDPErrorString(int error)
{
switch(error)
{
case 0:
return "No Error.";
break;
case WSAENETDOWN:
return "The network subsystem has failed.";
break;
case WSAEADDRINUSE:
return "Socket address is already in use.";
break;
case WSAEINPROGRESS:
case WSAENOBUFS:
return "Another Windows Socket Operation is in Progress.";
break;
case WSAEMFILE:
return "Not Enough Available Socket Resources.";
break;
case WSAENOTSOCK:
return "Not a Socket.";
break;
case WSAESHUTDOWN:
return "The Socket has been Shutdown.";
break;
case WSAEMSGSIZE:
return "The data was to large to fit in the specified buffer and has been truncated.";
break;
case WSAECONNABORTED:
return "The connection has been aborted";
break;
case WSAECONNRESET:
return "The connection was reset by the remote site.";
break;
case WSAETIMEDOUT:
return "The connection timed out.";
break;
case WSANOTINITIALISED:
return "Unknown System Error.";
break;
case WSAEACCES:
return "Unknown System Error.";
break;
case WSAEINTR:
return "Unknown System Error.";
break;
case WSAEFAULT:
return "Unknown System Error.";
break;
case WSAENETRESET:
return "Unknown System Error.";
break;
case WSAENOTCONN:
return "Unknown System Error.";
break;
case WSAEOPNOTSUPP:
return "Unknown System Error.";
break;
case WSAEWOULDBLOCK:
return "Unknown System Error.";
break;
case WSAEINVAL:
return "Unknown System Error.";
break;
default:
return "Unknown System Error.";
break;
}
return "Unknown System Error.";
}

上面是我的UDP.C程序 我是在CVI里面用UDP 因为不支持UDP 所以加载了Wsock32.lib之后,写这样一个源程序,下面的代码是我调用的时候的代码(是在一个每隔10秒循环一次操作的定时空间里面的消息响应事件里面写的)

//UDPRead.c

if((err = UDPOpen (3100, &udpHandle)) != 0)
{
MessagePopup("", UDPErrorString (err));
return 0;
}
if((err = UDPRead (udpHandle, buf, 5000, 10)) != 0)
{
MessagePopup("", UDPErrorString (err));
UDPClose(udpHandle);
return 0;

buf[5] = '\0';
UDPClose (udpHandle);
MessagePopup("", buf);
}

每次连接的时候都报错连接超时
...全文
630 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
zottff 2007-05-21
  • 打赏
  • 举报
回复
查收邮件
smile0403 2007-05-21
  • 打赏
  • 举报
回复
好的 谢谢大家 我再试试! 先把分结了,如果还没成功, 我再发帖问大家
zottff 能把你试了的 程序发到我邮箱 我看下么lin647@163.com 谢谢!

littlebao 去掉了那句之后程序就跑飞了 停不下来 没有响应
smile0403 2007-05-21
  • 打赏
  • 举报
回复
上午网络忽然断了 现在给分 谢谢各位
littlebao 2007-05-20
  • 打赏
  • 举报
回复
你没有建立链接啊?那里有链接错误?
或者你把这个去掉试试setsockopt(socketHandle, SOL_SOCKET, SO_RCVTIMEO, (char*)&timeout, sizeof(int));
zottff 2007-05-20
  • 打赏
  • 举报
回复
我用你的程序添加发送代码进行自发自收是没有问题的
DentistryDoctor 2007-05-20
  • 打赏
  • 举报
回复
UDP是面向报文的,而非面向连接的。
smile0403 2007-05-20
  • 打赏
  • 举报
回复
有发送端,是频谱分析仪

程序上我找不出错误 也是刚刚学UDP不久

所以请大家帮忙看看 谢谢
hzcpig 2007-05-20
  • 打赏
  • 举报
回复
怀疑是你频谱分析仪发送端的问题
zottff 2007-05-19
  • 打赏
  • 举报
回复
有发送端吗?没有发送端接收时当然要超时了,或者可以考虑自发自收
smile0403 2007-05-19
  • 打赏
  • 举报
回复
没有人帮帮忙么 ?!?
smile0403 2007-05-18
  • 打赏
  • 举报
回复
能说详细点么 3Q
smile0403 2007-05-18
  • 打赏
  • 举报
回复
不太明白 我的程序有错误么?
为什么收不到数据包呢
  • 打赏
  • 举报
回复
udp还能连接么?创建好之后就能够直接返送,不需要连接的
mynamelj 2007-05-18
  • 打赏
  • 举报
回复
UDP是无连接的,直接收发就行了

18,356

社区成员

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

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