本地domain套接字udp协议的服务器端c语言代码
时间: 2023-09-02 11:13:10 浏览: 101
c语言udp服务器端代码
以下是使用本地domain套接字实现UDP协议的服务器端代码示例(使用C语言):
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <sys/un.h>
#include <unistd.h>
#define SOCKET_PATH "/tmp/server.sock"
int main() {
int server_socket;
struct sockaddr_un server_address;
char buffer[1024];
int len, n;
// 创建本地domain套接字(UDP协议)
if ((server_socket = socket(AF_UNIX, SOCK_DGRAM, 0)) < 0) {
perror("socket");
exit(1);
}
// 绑定服务器端地址
memset(&server_address, 0, sizeof(server_address));
server_address.sun_family = AF_UNIX;
strncpy(server_address.sun_path, SOCKET_PATH, sizeof(server_address.sun_path) - 1);
unlink(SOCKET_PATH);
if (bind(server_socket, (struct sockaddr*)&server_address, sizeof(server_address)) < 0) {
perror("bind");
exit(1);
}
// 接收客户端的消息并回复
while (1) {
if ((n = recvfrom(server_socket, buffer, sizeof(buffer), 0, NULL, NULL)) < 0) {
perror("recvfrom");
exit(1);
}
buffer[n] = '\0';
printf("Received message from client: %s\n", buffer);
char* message = "Hello, client!";
if (sendto(server_socket, message, strlen(message), 0, (struct sockaddr*)&server_address, sizeof(server_address)) < 0) {
perror("sendto");
exit(1);
}
}
// 关闭套接字
close(server_socket);
return 0;
}
```
在上述代码中,首先创建了一个本地domain套接字,并使用`AF_UNIX`指定地址族为UNIX域,使用`SOCK_DGRAM`指定传输协议为UDP。然后绑定了服务器端的地址为`/tmp/server.sock`。接下来进入循环,使用`recvfrom`方法接收客户端的消息,并使用`sendto`方法回复客户端。最后关闭套接字。注意在C语言中需要手动处理字符串的结束符`\0`。
阅读全文