linux udp 客户端recvfrom,一直没有数据接收,谁能帮看看这代码哪里出了问题了????
2015-11-18 16:38
706 查看
void* StartDiscoveryThread(void *arg) { int so_broadcast=1; struct sockaddr_in toAddr; //客户端的网络地址。 struct sockaddr_in serverAddr; //服务器端的网络地址。 char inBuff[DD_BUFF_LEN]; int sockaddrLen = 0; int inLen; int ret; NETPARAM stRespond = {0}; int rsock = createUDPSokcet(TF6x0_PORT); while(1) { sockaddrLen = sizeof(toAddr); inLen = recvfrom(rsock, inBuff, DD_BUFF_LEN, 0, (struct sockaddr*)&toAddr,(socklen_t*)&sockaddrLen); if(inLen<=0) { DD_DEBUG("recv failed! skip, continue ..."); sleep(1); } else { ret = memcmp(inBuff,CONST_MESSAGE,strlen(CONST_MESSAGE)); if(0!=ret) { continue; } else { ////填充需要发送的信息 netGetIPAddr(DD_IFace, &(stRespond.ip)); stRespond.dev_model = 1111; ///toAddr.sin_addr.s_addr = inet_addr("255.255.255.255"); ///toAddr.sin_port = htons(TF6x0_PORT); sockaddrLen = sizeof(struct sockaddr); ret = sendto(rsock,&stRespond,sizeof(stRespond),0,(struct sockaddr*)&toAddr, sizeof(toAddr)); if(ret < 0) { printf("send failed!\n"); } else { printf("server sned to client(ip:%s port:%d)success ret=%d %d\n", inet_ntoa(toAddr.sin_addr),ntohs(toAddr.sin_port), ret, __LINE__); continue; } } } sleep(3); } close(rsock); ///close(wsock); return NULL; } int DiscoveryClientHandle(std::list<NETPARAM> &lis) { int sock = -1, retVal = -1; int fBroadcast; struct sockaddr_in addrSrc; struct sockaddr_in addrDst; int sockaddrLen = sizeof(struct sockaddr_in); NETPARAM resp; char buf[1024] = {0}; if(sock<0) { sock = createUDPSokcet(LOCAL_PORT); memset(&addrSrc, 0, sockaddrLen); addrSrc.sin_family = AF_INET; addrSrc.sin_addr.s_addr = htonl(INADDR_BROADCAST); addrSrc.sin_port = htons(LOCAL_PORT); memset(&addrDst, 0, sockaddrLen); addrDst.sin_family = AF_INET; addrDst.sin_addr.s_addr = htonl(INADDR_BROADCAST); addrDst.sin_port = htons(TF6x0_PORT); retVal = sendto(sock, CONST_MESSAGE,strlen(CONST_MESSAGE),0,(struct sockaddr*)&addrDst, sizeof(addrDst)); if (retVal <0) { printf("DiscoveryClientHandle send faile\n"); } else { do { sockaddrLen = sizeof(addrSrc); printf("client send %s to(ip:%s, prot:%d) success, now accept the server info line:%d \n",CONST_MESSAGE, inet_ntoa(addrDst.sin_addr),ntohs(addrDst.sin_port), __LINE__); retVal = recvfrom(sock, buf, 1024, 0, (struct sockaddr *)&addrSrc, (socklen_t*)&sockaddrLen); if(-1 == retVal) { printf("recvfrom error------------------\n"); break; } else { printf("get ip(%d.%d.%d.%d) dev_model=%d!\r\n", (resp.ip)&0xff, (resp.ip>>8)&0xff, (resp.ip>>16)&0xff, (resp.ip>>24)&0xff,resp.dev_model); lis.push_back(resp); } usleep(1000); }while(1); } } close(sock); return 1; } int devDiscovery(void) { int ret; if(0!=Discoveryid) return -1; ret= pthread_create(&Discoveryid,0,StartDiscoveryThread,0); return ret; }
上面代码有一个是个服务端 被搜索的代码,客户端广播一个搜索信号,如果设备接收到客户端的搜索信息,就把设备的ip以及一些信息发送到客户端,客户端对这些信息进行保存,说白了就是一个搜索设备的两端,现在的问题是客户端接收不到信息,一直卡在recvfrom这里,我这里暂时没做超时处理和非阻塞。我想问这里到底什么问题???????????
相关文章推荐
- 如何从一台远程Linux主机备份另一台主机上的数据库
- 运行于u盘的精简linux系统制作
- centos7 防火墙
- Linux 的启动流程
- Linux下输入输出流错误流 & 重定向 & 管道
- LINUX下解决netstat查看TIME_WAIT状态过多问题
- sort命令
- Linux下配置Mysql允许远程访问详解
- Linux 编译安装Boost
- Linux下的压缩解压缩命令详解
- CentOS7 初次安装记录(六)配置 FTP 服务器
- centos yum update kernel
- linux 下 gb18030 转码成 utf8
- 虚拟机安装archlinux的简单步骤
- 安装vnc远程连接CentOS桌面
- CentOS7下openstack的liberty模板分享
- Linux文件写入的工作原理
- linux内核编译测试环境搭建详解
- 实例详解Linxu中df命令
- CentOS 7 中firewall-cmd命令