写一个安卓10版本以上的local socket的服务端和客户端代码,要求c语言编写
时间: 2023-11-28 10:49:19 浏览: 40
以下是一个简单的安卓10版本以上的local socket服务端和客户端代码。请注意,以下代码仅供参考,并未进行完整的测试和验证,不保证完全正确和可用。
服务端代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/un.h>
#define SOCK_PATH "/data/data/com.example.sockettest/mysocket"
int main() {
int server_fd, client_fd;
int len;
struct sockaddr_un server_addr, client_addr;
char buf[256];
// 创建套接字
if ((server_fd = socket(AF_LOCAL, SOCK_STREAM, 0)) == -1) {
perror("socket");
exit(EXIT_FAILURE);
}
// 绑定地址
server_addr.sun_family = AF_LOCAL;
strcpy(server_addr.sun_path, SOCK_PATH);
unlink(server_addr.sun_path);
len = strlen(server_addr.sun_path) + sizeof(server_addr.sun_family);
if (bind(server_fd, (struct sockaddr *)&server_addr, len) == -1) {
perror("bind");
exit(EXIT_FAILURE);
}
// 监听连接
if (listen(server_fd, 5) == -1) {
perror("listen");
exit(EXIT_FAILURE);
}
// 接受连接
socklen_t client_len = sizeof(client_addr);
if ((client_fd = accept(server_fd, (struct sockaddr *)&client_addr, &client_len)) == -1) {
perror("accept");
exit(EXIT_FAILURE);
}
// 接收数据
while (1) {
int num_bytes = recv(client_fd, buf, sizeof(buf), 0);
if (num_bytes == -1) {
perror("recv");
exit(EXIT_FAILURE);
} else if (num_bytes == 0) {
printf("Connection closed\n");
break;
}
printf("Received: %s", buf);
}
// 关闭连接
close(client_fd);
close(server_fd);
unlink(server_addr.sun_path);
return 0;
}
```
客户端代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/un.h>
#define SOCK_PATH "/data/data/com.example.sockettest/mysocket"
int main() {
int client_fd;
struct sockaddr_un server_addr;
char *buf = "Hello, world!\n";
// 创建套接字
if ((client_fd = socket(AF_LOCAL, SOCK_STREAM, 0)) == -1) {
perror("socket");
exit(EXIT_FAILURE);
}
// 连接服务器
server_addr.sun_family = AF_LOCAL;
strcpy(server_addr.sun_path, SOCK_PATH);
int len = strlen(server_addr.sun_path) + sizeof(server_addr.sun_family);
if (connect(client_fd, (struct sockaddr *)&server_addr, len) == -1) {
perror("connect");
exit(EXIT_FAILURE);
}
// 发送数据
if (send(client_fd, buf, strlen(buf), 0) == -1) {
perror("send");
exit(EXIT_FAILURE);
}
// 关闭连接
close(client_fd);
return 0;
}
```