linux udp 客户端recvfrom,一直没有数据接收,谁能帮看看这代码哪里出了问题了????
来源:互联网 发布:机顶盒软件 编辑:程序博客网 时间:2024/05/01 23:46
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这里,我这里暂时没做超时处理和非阻塞。我想问这里到底什么问题???????????
0 0
- linux udp 客户端recvfrom,一直没有数据接收,谁能帮看看这代码哪里出了问题了????
- 请大家帮我看看是哪里出了问题?
- 实现了一个简单的聊天软件,但是有个BUG,一直没有想通问题出在哪里。
- recvfrom接收udp包代码,注释中写明了几点注意事项
- 到底哪里出了问题?
- 请帮忙看看这Delphi代码是哪里出错了!!!!
- 帮忙看看这段代码哪里错了。
- 这代码哪里出了错误,要如何修改呢?
- 本程序说明了如何建立一个可以接收UDP客户端数据的UDP 服务器
- 国产游戏产品哪里出了问题
- 创意作品,BUT问题出在哪里了?????????
- 到底是哪里出了问题?
- 哪里出了错?
- 帮忙看看哪里出问题了
- UDP接收多路视频数据, 接收缓存不足了
- 本程序说明了如何建立一个简单的可以接收UDP服务器数据的UDP客户端
- ibatis这问题哪里错了,查不出数据
- 出了错误/问题到哪里找答案?
- 滑动效果
- ajaxfileupload.js问题汇总及解决 附修复版下载
- (转载)Deep Learning(深度学习)学习笔记整理系列之(二)
- 微信支付时body有中文无法支付出现签名错误问题
- 【高效生活】巧画甘特图
- linux udp 客户端recvfrom,一直没有数据接收,谁能帮看看这代码哪里出了问题了????
- exception is java.lang.NoSuchFieldError: INSTANCE
- UTC和GMT时间辨析
- 最详细的Log4j使用教程
- InnoDB与Myisam存储引擎
- github生成多个ssh key,如何解决
- Lombok 安装、入门 - 消除冗长的 java 代码
- 开发源程序框架(Html+JQuery+EasyUI +Ajax+ashx+ado.net)
- Android 高清加载巨图方案 拒绝压缩图片