使用AF_UNIX套接字进行双向通信



我想使用AF_UNIX套接字而不是AF_INET来实现 python 官方文档中关于套接字模块的示例。因此,服务器代码现在的外观如下:

import socket
import os
filename = '/tmp/mysock'
sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM, 0)
if os.path.exists(filename):
    os.remove(filename)
sock.bind(filename)
while 1:
    data = sock.recv(1024)
    print 'Received', repr(data)
    if not data:
        break
    sock.sendall(data)
sock.close()

当我运行它时,我得到这个:

Traceback (most recent call last):
  File "/home/somecode/server.py", line 10, in <module>
    data = sock.recv(2048)
socket.error: [Errno 22] Invalid argument
SOCK_STREAM是一种

有状态套接字类型,因此任何连接都必须首先由侦听套接字确认,然后使用新的动态套接字(连接(来发送和接收。您不能只从侦听套接字接收。

基本上你忘了在绑定和connection, address = sock.accept()后在套接字上调用sock.listen(),这会阻塞直到建立连接,然后返回带有新套接字(连接(和客户端地址的元组。然后只需使用 connection.recv() .这对于 UNIX 套接字和 TCP/IP 套接字是通用的。

例如,看看这里。

最新更新