このコードに出くわしたとき、私はCでソケットプログラミングを理解しようとしていました:
/* Sample UDP client */
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdio.h>
#include <string.h>
int main(int argc, char**argv)
{
int sockfd,n;
struct sockaddr_in servaddr;
char sendline[] = "Hello UDP server! This is UDP client";
char recvline[1000];
if (argc != 2)
{
printf("usage: ./%s <IP address>\n",argv[0]);
return -1;
}
sockfd=socket(AF_INET,SOCK_DGRAM,0);
bzero(&servaddr,sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr=inet_addr(argv[1]);
servaddr.sin_port=htons(32000);
sendto(sockfd,sendline,strlen(sendline),0,(struct sockaddr *)&servaddr,sizeof(servaddr));
n=recvfrom(sockfd,recvline,10000,0,NULL,NULL);
recvline[n]=0;
printf("Received: %s\n",recvline);
return 0;
}
recvfrom()
メッセージを送信するために呼び出しに IP アドレスは必要ないようです。マニュアルページを見ると、次の行が明らかになりました。
src_addr が NULL ではなく、基になるプロトコルが送信元アドレスを提供する場合、この送信元アドレスが入力されます。src_addr が NULL の場合、何も入力されません。この場合、addrlen は使用されず、NULL にする必要があります。
したがって、基になるプロトコルが送信元 IP アドレスを提供すると思います。私の問題は、メッセージを受信するアドレスを実際にどのように把握するのですか? アドレスにメッセージを送信すると、同じソケットを使用して他のアドレスにメッセージを送信できないということですか? 同じアドレスを使い続けるには?
助けてください。Google や講義ノートのどこにも答えが見つかりませんでした。
前もって感謝します。