c - udp senden und empfangen auf der gleichen Steckdose
Ich würde gerne Pakete empfangen und senden auf der gleichen Steckdose, ist es möglich oder muss ich schaffen, zwei sockel, eine zum senden und eine zum empfangen? Wenn ja, können Sie mir ein Beispiel nennen?
Andere Frage: wie kann ich die Quell-ip von einem empfangenen Paket?
BEARBEITEN (code Beispiel):
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;
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ja, Sie können verwenden die gleiche Buchse zum senden und empfangen.
recvfrom()
sagt dir die IP/port des Absenders. Einfachsendto()
IP/port über die gleiche Buchse, die Sie verwenden, mitrecvfrom()
, zB:sendto()
auf dem gleichen socket-handle, den Sie aufrufenrecvfrom()
auf?