linux下,使用socket udp帮我写一个代码,主函数里面负责接收数据,并打印出来。主线程中创建一个子线程,用来udp发送数据
时间: 2023-12-01 21:04:53 浏览: 57
如何在Python中创建一个UDP服务器
好的,以下是一个简单的UDP socket通信代码示例,主线程接收数据,创建一个子线程发送数据:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <pthread.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#define PORT 8888
#define MAX_MSG_SIZE 1024
void *send_thread(void *arg)
{
int sockfd = *(int *)arg;
char buffer[MAX_MSG_SIZE];
struct sockaddr_in addr;
memset(&addr, 0, sizeof(addr));
addr.sin_family = AF_INET;
addr.sin_addr.s_addr = htonl(INADDR_ANY);
addr.sin_port = htons(PORT);
while (1) {
fgets(buffer, MAX_MSG_SIZE, stdin);
sendto(sockfd, buffer, strlen(buffer), 0, (struct sockaddr *)&addr, sizeof(addr));
}
return NULL;
}
int main()
{
int sockfd;
struct sockaddr_in addr;
char buffer[MAX_MSG_SIZE];
pthread_t send_tid;
// 创建 socket
sockfd = socket(AF_INET, SOCK_DGRAM, 0);
if (sockfd == -1) {
perror("socket error");
exit(EXIT_FAILURE);
}
// 设置服务器地址
memset(&addr, 0, sizeof(addr));
addr.sin_family = AF_INET;
addr.sin_addr.s_addr = htonl(INADDR_ANY);
addr.sin_port = htons(PORT);
// 绑定地址
if (bind(sockfd, (struct sockaddr *)&addr, sizeof(addr)) == -1) {
perror("bind error");
exit(EXIT_FAILURE);
}
// 创建发送线程
if (pthread_create(&send_tid, NULL, send_thread, &sockfd) != 0) {
perror("pthread_create error");
exit(EXIT_FAILURE);
}
// 接收数据
while (1) {
struct sockaddr_in client_addr;
socklen_t addr_len = sizeof(client_addr);
int len = recvfrom(sockfd, buffer, sizeof(buffer), 0, (struct sockaddr *)&client_addr, &addr_len);
if (len <= 0) {
break;
}
buffer[len] = '\0';
printf("Received: %s", buffer);
}
// 关闭 socket
close(sockfd);
return 0;
}
```
这是一个简单的客户端程序,使用UDP协议连接指定的服务器并接收数据,同时创建一个子线程发送数据。当用户输入一行文本时,子线程将该文本通过UDP协议发送到服务器。原始的输入数据可以通过标准输入(stdin)获取。注意,此程序中没有加入任何错误检查或异常处理,仅供参考。
阅读全文