linux udp socket服务端如何知道客户端ip
时间: 2023-08-06 15:08:27 浏览: 61
在Linux下,UDP服务端可以通过使用recvfrom函数获取客户端的IP地址。当服务端接收到客户端的消息时,recvfrom函数会返回客户端的IP地址和端口号。服务端可以通过解析返回的结构体sockaddr_in来获取客户端的IP地址。以下是一个示例代码:
```
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
int main()
{
int sockfd;
struct sockaddr_in servaddr, cliaddr;
socklen_t len;
char buffer[1024];
sockfd = socket(AF_INET, SOCK_DGRAM, 0);
memset(&servaddr, 0, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = INADDR_ANY;
servaddr.sin_port = htons(8080);
bind(sockfd, (const struct sockaddr *)&servaddr, sizeof(servaddr));
len = sizeof(cliaddr);
recvfrom(sockfd, buffer, 1024, 0, (struct sockaddr *)&cliaddr, &len);
printf("Received message from client: %s\n", buffer);
printf("Client IP: %s\n", inet_ntoa(cliaddr.sin_addr));
return 0;
}
```
在上述示例代码中,服务端创建了一个UDP socket,绑定在端口号8080上。当服务端接收到客户端发送的消息时,调用recvfrom函数获取客户端的IP地址和端口号,并打印出来。函数inet_ntoa可以将IP地址从网络字节序转换成点分十进制表示。