c 接收/发送相同的套接字
c Receive / Send same socket
我很菜鸟,我有一个问题想知道是否可以在同一个套接字上 send/recv 因为 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, 0, 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, 0, &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, 0, 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), 0, (struct sockaddr*) &si_other, &slen);
if (blen == -1)
diep("recvfrom()");
printf("Data: %.*s \nReceived from %s:%d\n\n", blen, buf, inet_ntoa(si_other.sin_addr), ntohs(si_other.sin_port));
//send answer back to the client
if (sendto(s, buf, blen, 0, (struct sockaddr*) &si_other, slen) == -1)
diep("sendto()");
close(s);
return 0;
}```
我很菜鸟,我有一个问题想知道是否可以在同一个套接字上 send/recv 因为 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, 0, 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, 0, &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, 0, 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), 0, (struct sockaddr*) &si_other, &slen);
if (blen == -1)
diep("recvfrom()");
printf("Data: %.*s \nReceived from %s:%d\n\n", blen, buf, inet_ntoa(si_other.sin_addr), ntohs(si_other.sin_port));
//send answer back to the client
if (sendto(s, buf, blen, 0, (struct sockaddr*) &si_other, slen) == -1)
diep("sendto()");
close(s);
return 0;
}```