用C语言编写客户端和服务端用uds通信
时间: 2023-07-27 10:23:14 浏览: 61
下面是一个简单的使用C语言编写客户端和服务端使用uds进行通信的示例:
服务端代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/socket.h>
#include <sys/un.h>
#define SOCKET_NAME "/tmp/my_socket"
int main(int argc, char *argv[])
{
struct sockaddr_un addr;
int fd, cl, rc;
char buf[100];
if ( (fd = socket(AF_UNIX, SOCK_STREAM, 0)) == -1) {
perror("socket error");
exit(-1);
}
memset(&addr, 0, sizeof(addr));
addr.sun_family = AF_UNIX;
strncpy(addr.sun_path, SOCKET_NAME, sizeof(addr.sun_path)-1);
unlink(SOCKET_NAME);
if ( bind(fd, (struct sockaddr*)&addr, sizeof(addr)) == -1) {
perror("bind error");
exit(-1);
}
if ( listen(fd, 5) == -1) {
perror("listen error");
exit(-1);
}
while (1) {
if ( (cl = accept(fd, NULL, NULL)) == -1) {
perror("accept error");
continue;
}
while ( (rc=read(cl,buf,sizeof(buf))) > 0) {
printf("read %u bytes: %.*s\n", rc, rc, buf);
}
if (rc == -1) {
perror("read");
exit(-1);
}
else if (rc == 0) {
printf("EOF\n");
close(cl);
}
}
return 0;
}
```
客户端代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/socket.h>
#include <sys/un.h>
#define SOCKET_NAME "/tmp/my_socket"
int main(int argc, char *argv[])
{
struct sockaddr_un addr;
int fd, rc;
char buf[100];
if ( (fd = socket(AF_UNIX, SOCK_STREAM, 0)) == -1) {
perror("socket error");
exit(-1);
}
memset(&addr, 0, sizeof(addr));
addr.sun_family = AF_UNIX;
strncpy(addr.sun_path, SOCKET_NAME, sizeof(addr.sun_path)-1);
if ( connect(fd, (struct sockaddr*)&addr, sizeof(addr)) == -1) {
perror("connect error");
exit(-1);
}
if ( write(fd, "hello world", 12) == -1) {
perror("write error");
exit(-1);
}
return 0;
}
```
这个示例中,服务端首先创建一个UDS套接字,绑定到指定的地址上,然后监听客户端的连接请求。当有客户端连接时,服务端接收客户端发送的消息,并打印出来。
客户端首先创建一个UDS套接字,并连接到服务端指定的地址上。然后向服务端发送一条消息。
需要注意的是,服务端和客户端的地址应该是相同的,否则无法进行通信。在示例中,服务端和客户端的地址都是"/tmp/my_socket"。在使用UDS进行通信时,需要确保服务端和客户端的地址唯一,否则可能会出现通信错误。