首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

Linux UDP消息发送与接收的有关问题

2012-10-16 
Linux UDP消息发送与接收的问题Client端发送UDP报文,Server端接收处理后,用来源地址(IP和端口与客户端发送

Linux UDP消息发送与接收的问题
Client端发送UDP报文,
Server端接收处理后,用来源地址(IP和端口与客户端发送的相同)直接发送信息回Client代码如下:
  m_SrcAddrInfo从Server端的recvfrom函数里来,通过打印和抓包工具看出IP和端口是发送的IP和端口。
  int m_Socket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
sendto(m_Socket, buffer, bufferSize, 0,
(struct sockaddr*)&m_SrcAddrInfo, sizeof(m_SrcAddrInfo));

Client端在发送完成后等待该端口数据回应代码如下:
m_SocketID = openSocket();
timeout.tv_sec = 1;
timeout.tv_usec = INT_ZERO;

if(sendto(m_SocketID, buf, size, 0,
(struct sockaddr*)&m_ToAddr, sizeof(m_ToAddr)) != size)
{
closeSocket();
  return -1;
}

active = select(m_SocketID + 1, &read_fd, NULL, NULL, &timeout);
但结果总是超时(active==0)。不能这样使用吗?还是哪里处理的不正确,请指教,谢谢了!


[解决办法]
m_SocketID + 1 ?
[解决办法]
你要调用 FD_SET(m_SocketID, read_fd);
建议参考《WinSock网络编程经络》第14章, 19章 这里有源码,解压后找Daytime.
源码下载地址:http://download.csdn.net/detail/geoff08zhang/4571358
[解决办法]

探讨
我是这么做的,fp是啥文件描述符啊,怎么申明和定义的?能否详细描述下。我这样做,本机的进程间可以回复,但不同机器间不能回复,还是超时,抓包后,显示server端有回应,地址和端口也是发送的IP和端口。
int socketID = connect();

timeout.tv_sec = INT_ONE;
timeout.tv_usec = INT_ZERO;
FD_ZERO(&……

热点排行