使用 Python 从 Unix 套接字连接读取和写入

ale*_*aui 5 python sockets unix-socket

我正在使用 Python 试验 Unix 套接字。我想创建一个创建并绑定到套接字、等待命令并发送响应的服务器。

客户端将连接到套接字,发送一个命令,打印响应并关闭连接。

这就是我在服务器端所做的:

# -*- coding: utf-8 -*-
import socket
import os, os.path
import time
from collections import deque    

if os.path.exists("/tmp/socket_test.s"):
  os.remove("/tmp/socket_test.s")    

server = socket.socket(socket.AF_UNIX, socket.SOCK_DGRAM)
server.bind("/tmp/socket_test.s")
while True:
  server.listen(1)
  conn, addr = server.accept()
  datagram = conn.recv(1024)
  if datagram:
    tokens = datagram.strip().split()
    if tokens[0].lower() == "post":
      flist.append(tokens[1])
      conn.send(len(tokens) + "")
    else if tokens[0].lower() == "get":
      conn.send(tokens.popleft())
    else:
      conn.send("-1")
    conn.close()
Run Code Online (Sandbox Code Playgroud)

但是socket.error: [Errno 95] Operation not supported当我试图倾听时我得到了。

unix 套接字支持监听吗?否则,阅读和写作的正确方法是什么?

任何帮助表示赞赏:)

pbu*_*uck 11

SOCK_DGRAM套接字不听,它们只是绑定。将套接字类型更改为SOCK_STREAMlisten()将工作。

查看PyMOTW Unix 域套接字( SOCK_STREAM) 与PyMOTW 用户数据报客户端和服务器( SOCK_DGRAM)


小智 7

#!/usr/bin/python

import socket
import os, os.path
import time
from collections import deque

if os.path.exists("/tmp/socket_test.s"):
  os.remove("/tmp/socket_test.s")

server = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
server.bind("/tmp/socket_test.s")
while True:
  server.listen(1)
  conn, addr = server.accept()
  datagram = conn.recv(1024)
  if datagram:
    tokens = datagram.strip().split()
    if tokens[0].lower() == "post":
      flist.append(tokens[1])
      conn.send(len(tokens) + "")
    elif tokens[0].lower() == "get":
      conn.send(tokens.popleft())
    else:
      conn.send("-1")
    conn.close()
Run Code Online (Sandbox Code Playgroud)

修复了你的其他问题...以及 SOCK_DGRAM...