通过udp向网口转485模块发送数据包获取温湿度传感器数据遇到问题

a9182qpzm 2016-07-22 04:48:51
代码如下:
int port=8001;
int main()
{
int sock_1,sock_2;
int len,newlen;
int addresslen;
char buf[8];
char recvbuf[9];
struct sockaddr_in address,localaddress,newaddress;
fd_set fds;
struct timeval to;
int num;


bzero(&address,sizeof(address));
bzero(&localaddress,sizeof(localaddress));

address.sin_family=AF_INET;
address.sin_addr.s_addr=inet_addr("10.10.10.120");
address.sin_port=htons(port);
addresslen=sizeof(address);

localaddress.sin_family=AF_INET;
localaddress.sin_addr.s_addr=inet_addr("10.10.10.10");
localaddress.sin_port=htons(6001);

newlen=sizeof(address);
sock_1=socket(AF_INET,SOCK_DGRAM,0);
if(bind(sock_1,(struct sockaddr *)&localaddress,sizeof(localaddress))==0)
printf("bind success\n");


buf[0]=0x01;
buf[1]=0x04;
buf[2]=0x00;
buf[3]=0x00;
buf[4]=0x00;
buf[5]=0x02;
buf[6]=0x71;
buf[7]=0xCB;
len=sendto(sock_1,buf,sizeof(buf),0,(struct sockaddr *)&address,
sizeof(address));
printf("send:%d\n",len);
FD_ZERO(&fds);
FD_SET(sock_1,&fds);
to.tv_sec=3;
to.tv_usec=0;
num=select(sock_1+1,&fds,NULL,NULL,&to);
printf("select:%d\n",num);


len=recvfrom(sock_1,recvbuf,sizeof(recvbuf),0,
(struct sockaddr *)&address, &newlen);
printf("recvfrom success:%d\n",len);

printf("%d\n",recvbuf[0]);
printf("%d\n",recvbuf[1]);
printf("%d\n",recvbuf[8]);

close(sock_1)
close(sock_2);
return 0
}
程序运行后通过网口助手可得数据能发出去 ,但一直阻塞在recvfrom.求助解决。
...全文
703 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

4,441

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
  • 内核源代码研究区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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