Tôi muốn gửi và nhận các gói trên cùng một socket, có thể hoặc tôi phải tạo hai socket, một để gửi và một để nhận? Nếu có, bạn có thể cho tôi một ví dụ không?c - udp gửi và nhận trên cùng một socket
Một câu hỏi khác: làm thế nào tôi có thể lấy ip nguồn từ gói nhận được?
EDIT (mã ví dụ):
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");
if (recvfrom(s, buf, BUFLEN, 0, &si_other, &slen)==-1)
diep("recvfrom()");
printf("Data: %s \nReceived from %s:%d\n\n", buf, inet_ntoa(si_other.sin_addr), ntohs(si_other.sin_port));
//now I want the server to answer back to the client
close(s);
return 0;
}
bạn có thể xin vui lòng gửi một ví dụ? – user3574984
Trong số những gì? gửi/nhận? Hoặc nhận nguồn IP/Cổng? Có rất nhiều ví dụ về cả hai trực tuyến nếu bạn nhìn xung quanh. –
Máy chủ nhận gói tin => trả lời lại trên cùng một ổ cắm udp ... Tôi biết cách nhận và cách gửi, nhưng không phải cách thực hiện với cùng một ổ cắm! – user3574984