gpt4 book ai didi

python-3.4 - Python 3.X Unix 套接字示例

转载 作者:行者123 更新时间:2023-12-01 22:55:55 24 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





TypeError: str does not support buffer interface [duplicate]

(1 个回答)


6年前关闭。




过去几个小时,我一直在寻找一个简单的服务器/客户端 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 部分。有什么建议吗?
  • 此外,我使用的示例中的语法从一个导入中加载了多个模块
    导入操作系统,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 是否只支持二进制?
  • 使这项工作最简单的方法是什么?

  • 提前致谢!

    最佳答案

    要明确回答 OP 的问题:

  • “TypeError:'str' 不支持缓冲区接口(interface)”错误是由尝试通过字节接口(interface)发送/接收字符串编码数据引起的。
  • Unix套接字不知道编码,它们传递原始字节,Python 3+不再为你做任何魔术字节<->编码字符串转换,所以在这个意义上是的,(Python 3(.4))Unix套接字只支持“二进制”。
  • 使其工作的最简单方法是@jmhobbs 在他上面链接的要点中演示:您必须在 client.send()'ing 时将字符串 .encode() 转换为字节,并在服务器时将字节 .decode() 返回字符串.recv()'ing 他们。
  • 关于python-3.4 - Python 3.X Unix 套接字示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23282635/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com