gpt4 book ai didi

c - 如何使用 SOCK_DGRAM 制作双向 unix 域套接字?

转载 作者:太空狗 更新时间:2023-10-29 15:22:44 24 4
gpt4 key购买 nike

我正在尝试编写一个简单的 Unix 数据报服务器/客户端,但遇到了一些问题。我想要的是一个监听数据报套接字并向原始发件人发送对收到的每条消息的回复的服务器。我决定首先尝试使用 socat 作为“服务器”并用 C 语言编写客户端。我正在这样运行 socat:

socat UNIX-DGRAM:/tmp/test.socket,fork EXEC:echo

据我所知,这应该监听 /tmp/test.socket 并回复使用相同字符串收到的所有内容?然后我有一个看起来像这样的客户端程序(为清楚起见删除了错误检查):

int s = socket(AF_UNIX, SOCK_DGRAM, 0);
struct sockaddr_un sa;
sa.sun_family = AF_UNIX;
strcpy(sa.sun_path, "/tmp/test.socket");

const char *data = "Testing data";
int err = sendto(s, data, strlen(data), 0, (struct sockaddr *)(&sa), sizeof(struct sockaddr_un));

printf("Sent!\n");

unsigned char *buffer = malloc(BUFFER_LENGTH);
struct sockaddr_storage recv_sa;
int recv_sa_len = 0;
int recv_len = recvfrom(s, buffer, BUFFER_LENGTH, 0, (struct sockaddr *)&recv_sa, &recv_sa_len);

for (int i = 0; i < recv_len; i++) {
putc(buffer[i], stdout);
}
printf("\n");

它应该发送数据包(有效),接收数据包,然后打印出来,但程序似乎无法接收数据包。我在这里做错了什么,或者我对 Unix 套接字有根本的误解?谢谢!

最佳答案

查看 Michael Kerrisk 的 AF_UNIX SOCK_DGRAM 客户端/服务器程序示例(clientserver),该示例发表在他的著作《Linux 编程接口(interface)》第 57 章中。

关于c - 如何使用 SOCK_DGRAM 制作双向 unix 域套接字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7325468/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com