首页 > 解决方案 > c语言通过指定文件连接客户端socket

问题描述

这是来自MBDyn教程的 python 套接字连接代码。

# create input socket (2 double: x, x_prime)
s_in = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM);
s_in.connect("./mbdyn.body.sock");
s_in_bufsize = 2*8

# create output socket (1 double: f)
s_out = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM);
s_out.connect("./mbdyn.spring.sock");
s_out_bufsize = 8

我想了解如何使用

s_out.connect("./mbdyn.spring.sock");

也可以在 c 代码中连接文件。

connect(sock, (struct sockaddr *)&serv_addr, sizeof(serv_addr))

如何在上述c样式代码中指定像 python 一样充当套接字的文件?

解决方案会像

sock = fopen(...);//socket(AF_INET, SOCK_STREAM, 0);

标签: clinuxsockets

解决方案


而不是AF_INET,您需要使用AF_UNIX,就像在您的 Python 代码中一样。您的系统可能有一个手册页unix,包括示例。我的包括以下内容(释义:我省略了错误检查):

       struct sockaddr_un name;
       memset(&name, 0, sizeof name);

       /* Bind socket to socket name. */
       name.sun_family = AF_UNIX;
       strncpy(name.sun_path, SOCKET_NAME, sizeof name.sun_path - 1);

       bind(connection_socket, (const struct sockaddr*)&name, sizeof name);

请注意,sun_path成员struct sockaddr_un比字符小得多PATH_MAX,因此您受限于套接字 inode 应位于的位置。

显然你不使用fopen()-f意思是“文件”。


推荐阅读