C语言编写两个udp客户端能够自定义IP和端口并且相互通信的代码
时间: 2024-05-14 14:13:28 浏览: 99
C语言编写的UDP通信程序
4星 · 用户满意度95%
可以使用C语言的socket编程实现两个UDP客户端之间的通信,代码如下:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#define SERVER_IP "127.0.0.1"
#define SERVER_PORT 8888
int main(int argc, char *argv[])
{
int sockfd, ret;
struct sockaddr_in server_addr, client_addr;
char buf[1024];
// 创建socket
sockfd = socket(AF_INET, SOCK_DGRAM, 0);
if (sockfd < 0) {
perror("socket error");
exit(1);
}
// 设置服务器地址
memset(&server_addr, 0, sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_addr.s_addr = inet_addr(SERVER_IP);
server_addr.sin_port = htons(SERVER_PORT);
// 设置客户端地址
memset(&client_addr, 0, sizeof(client_addr));
client_addr.sin_family = AF_INET;
client_addr.sin_addr.s_addr = htonl(INADDR_ANY);
client_addr.sin_port = htons(0);
// 绑定客户端地址
ret = bind(sockfd, (struct sockaddr *)&client_addr, sizeof(client_addr));
if (ret < 0) {
perror("bind error");
exit(1);
}
// 发送数据
printf("请输入要发送的内容:\n");
fgets(buf, sizeof(buf), stdin);
buf[strlen(buf) - 1] = '\0'; // 去掉换行符
ret = sendto(sockfd, buf, strlen(buf), 0, (struct sockaddr *)&server_addr, sizeof(server_addr));
if (ret < 0) {
perror("sendto error");
exit(1);
}
// 接收数据
memset(buf, 0, sizeof(buf));
ret = recvfrom(sockfd, buf, sizeof(buf), 0, NULL, NULL);
if (ret < 0) {
perror("recvfrom error");
exit(1);
}
printf("收到的消息:%s\n", buf);
// 关闭socket
close(sockfd);
return 0;
}
```
其中,SERVER_IP和SERVER_PORT分别为服务器的IP地址和端口号,可以根据需要修改。客户端通过socket函数创建socket,然后设置服务器地址和客户端地址,绑定客户端地址,发送数据,接收数据,最后关闭socket。
阅读全文