因此,当我遇到以下代码时,我试图理解 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 或任何讲义中都找不到答案。
先感谢您。