簡體   English   中英

使用Python從Unix套接字連接讀寫

[英]Read and write from Unix socket connection with Python

我正在使用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()

但我得到socket.error: [Errno 95] Operation not supported嘗試收聽時socket.error: [Errno 95] Operation not supported

unix套接字是否支持監聽? 否則,閱讀和寫作的正確方法是什么?

任何幫助贊賞:)

SOCK_DGRAM套接字不監聽,它們只是綁定。 將套接字類型更改為SOCK_STREAM ,您的listen()將起作用。

查看PyMOTW Unix域套接字SOCK_STREAM )與PyMOTW用戶數據報客戶端和服務器SOCK_DGRAM

#!/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()

修正了你...和SOCK_DGRAM ......

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM