介绍一下linux中的localsocket及使用例子
时间: 2023-06-24 07:04:12 浏览: 267
linux socket 实例
3星 · 编辑精心推荐
LocalSocket 是 Linux 中用于进程间通信(IPC)的一种机制。它可以用于本地进程之间的数据传递,也可以用于客户端和服务器之间的通信。
在使用 LocalSocket 进行通信时,需要创建一个服务器进程和一个或多个客户端进程。服务器进程创建一个监听 socket,并等待客户端连接。当客户端连接时,服务器会创建一个新的 LocalSocket,并使用它与客户端进行通信。
下面是一个 LocalSocket 的使用例子:
服务器端代码:
```c
#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/un.h>
#define SOCKET_NAME "/tmp/mysocket"
int main(int argc, char *argv[]) {
int server_fd, client_fd, len;
struct sockaddr_un server_address, client_address;
char buffer[256];
server_fd = socket(AF_UNIX, SOCK_STREAM, 0);
if (server_fd < 0) {
perror("socket");
exit(1);
}
memset(&server_address, 0, sizeof(server_address));
server_address.sun_family = AF_UNIX;
strcpy(server_address.sun_path, SOCKET_NAME);
len = sizeof(server_address);
unlink(SOCKET_NAME);
if (bind(server_fd, (struct sockaddr *)&server_address, len) < 0) {
perror("bind");
exit(1);
}
if (listen(server_fd, 5) < 0) {
perror("listen");
exit(1);
}
while (1) {
printf("Waiting for client...\n");
len = sizeof(client_address);
client_fd = accept(server_fd, (struct sockaddr *)&client_address, &len);
if (client_fd < 0) {
perror("accept");
exit(1);
}
printf("Client connected.\n");
memset(buffer, 0, sizeof(buffer));
read(client_fd, buffer, sizeof(buffer));
printf("Received message: %s\n", buffer);
close(client_fd);
}
return 0;
}
```
客户端代码:
```c
#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/un.h>
#define SOCKET_NAME "/tmp/mysocket"
int main(int argc, char *argv[]) {
int client_fd, len;
struct sockaddr_un address;
char buffer[256];
client_fd = socket(AF_UNIX, SOCK_STREAM, 0);
if (client_fd < 0) {
perror("socket");
exit(1);
}
memset(&address, 0, sizeof(address));
address.sun_family = AF_UNIX;
strcpy(address.sun_path, SOCKET_NAME);
len = sizeof(address);
if (connect(client_fd, (struct sockaddr *)&address, len) < 0) {
perror("connect");
exit(1);
}
printf("Connected to server.\n");
memset(buffer, 0, sizeof(buffer));
strcpy(buffer, "Hello from client!");
write(client_fd, buffer, sizeof(buffer));
close(client_fd);
return 0;
}
```
上面的代码演示了 LocalSocket 的基本使用方法。在服务器端,我们创建了一个 LocalSocket 并进行了绑定和监听。当客户端连接时,服务器会读取客户端发送的消息,并在控制台输出。在客户端,我们创建了一个 LocalSocket 并连接到服务器。然后,我们向服务器发送一条消息并关闭连接。
要运行这个示例,可以先编译服务器和客户端的代码:
```
gcc server.c -o server
gcc client.c -o client
```
然后在一个终端窗口中运行服务器:
```
./server
```
在另一个终端窗口中运行客户端:
```
./client
```
当客户端发送消息后,服务器将输出以下内容:
```
Waiting for client...
Client connected.
Received message: Hello from client!
```
这表明服务器已成功接收到来自客户端的消息。
阅读全文