通过C语言的指定文件进行客户端套接字连接

时间:2018-11-12 14:27:48

标签: c linux sockets

这是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);

1 个答案:

答案 0 :(得分:1)

您需要使用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的{​​{1}}成员比struct sockaddr_un字符小得多,因此,套接字inode应该位于何处受到了限制。

很明显,您没有使用PATH_MAX-fopen()的意思是“文件”。