大佬教程收集整理的这篇文章主要介绍了c 接收/发送相同的套接字,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我很菜鸟,我有个问题想知道是否可以在同一个套接字上发送/接收,因为 recv/recvfrom 阻塞了我的代码?
int main(voID) {
struct sockaddr_in si_me,si_other;
int s,i,slen=sizeof(si_other);
char buf[BUFLEN];
if ((s=socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP))==-1)
dIE("socket");
memset((char *) &si_me,sizeof(si_me));
si_me.sin_family = AF_INET;
si_me.sin_port = htons(1234);
si_me.sin_addr.s_addr = htonl(192.168.1.1);
if (bind(s,&si_me,sizeof(si_me))==-1)
dIE("bind");
recvfrom(s,buf,BUFLEN,&si_other,&slen;
close(s);
return 0;
}
谢谢!
是的,你可以!
但是请注意,下一次读取或接收可能会读取不同的数据报。 UDP 数据报总是可丢弃的 你仍然可以用 MsgPEEK 或类似的东西来标记你的 recv()
看到这个话题 here ,我想你从那个人那里拿走了代码不是吗? :)
如果你懒惰这里是来自主题的代码
struct sockaddr_in si_me,si_other;
int s,i,blen,slen = sizeof(si_other);
char buf[BUFLEN];
s = socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);
if (s == -1)
die("socket");
memset((char *) &si_me,sizeof(si_me));
si_me.sin_family = AF_INET;
si_me.sin_port = htons(1234);
si_me.sin_addr.s_addr = htonl(192.168.1.1);
if (bind(s,(struct sockaddr*) &si_me,sizeof(si_me))==-1)
die("bind");
int blen = recvfrom(s,buf,sizeof(buf),(struct sockaddr*) &si_other,&slen);
if (blen == -1)
diep("recvfrom()");
printf("Data: %.*s \nReceived from %s:%d\n\n",inet_ntoa(si_other.sin_addr),ntohs(si_other.sin_port));
//send answer back to the client
if (sendto(s,slen) == -1)
diep("sendto()");
close(s);
return 0;
}```
以上是大佬教程为你收集整理的c 接收/发送相同的套接字全部内容,希望文章能够帮你解决c 接收/发送相同的套接字所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。