过去几个小时,我一直在寻找一个简单的服务器/客户端 Unix 套接字示例。我找到了适用于 Python 2.X 的示例,但找不到适用于 Python 3.X 的示例。
我不断收到 TypeErrors。
我一直在使用的示例是:
客户端.py
# -*- coding: utf-8 -*-
import socket
import os
# import os, os.path
print("Connecting...")
if os.path.exists("/tmp/python_unix_sockets_example"):
client = socket.socket( socket.AF_UNIX, socket.SOCK_DGRAM )
client.connect("/tmp/python_unix_sockets_example")
print("Ready.")
print("Ctrl-C to quit.")
print("Sending 'DONE' shuts down the server and quits.")
while True:
# try:
x = input( "> " )
if "" != x:
print("SEND:", x)
client.send( x )
if "DONE" == x:
print("Shutting down.")
break
# except KeyboardInterrupt, k:
# print("Shutting down.")
client.close()
else:
print("Couldn't Connect!")
print("Done")
- 对于客户端部分,我不确定如何让 KeyboardInterupt 在 3.X 中工作,所以我取消了 Try 和 except 部分。有什么建议吗?
- 此外,我使用的示例中的语法从一个 import import os, os.path 加载了多个模块,这是仅从 os 模块加载 os.path 的旧方法吗?
服务器.py
# -*- coding: utf-8 -*-
import socket
import os
# import os, os.path
# import time
if os.path.exists("/tmp/python_unix_sockets_example"):
os.remove("/tmp/python_unix_sockets_example")
print("Opening socket...")
server = socket.socket(socket.AF_UNIX, socket.SOCK_DGRAM)
server.bind("/tmp/python_unix_sockets_example")
print("Listening...")
while True:
datagram = server.recv(1024)
if not datagram:
break
else:
print("-" * 20)
print(datagram)
if "DONE" == datagram:
break
print("-" * 20)
print("Shutting down...")
server.close()
os.remove("/tmp/python_unix_sockets_example")
print("Done")
当我运行它时,我得到 TypeError: 'str' does not support the buffer interface。
Python 3.4 Unix Sockets 是否只支持二进制?
使这项工作最简单的方法是什么?
提前致谢!