【发布时间】:2018-07-02 14:01:02
【问题描述】:
我在这里的第一个问题,请温柔 :) 我正在尝试设置一个基本的 Python (2.7) TCP 套接字服务器,它是多线程的(我还没有进入多线程部分)和一个客户端。
这里是服务器:
# Basic TCP socket server
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = ''
port = 8888
s.bind((host, port))
s.listen(5)
while True:
c, addr = s.accept()
print("Connected to %s" % addr)
c.send("Hello socket")
c.close()
这里是客户端:
# Basic TCP socket client
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = '127.0.0.1'
port = 8888
s.connect((host, port))
print s.recv(1024)
s.close()
当我运行服务器时,它似乎执行没有错误,但是当我运行客户端进行连接时,我没有看到应该打印到运行服务器的终端窗口的消息。这是错误(正如@Rawing 指出的那样):
Traceback(最近一次调用最后一次):文件“server.py”,第 19 行,在 print("Connected to %s" % addr) TypeError: 字符串格式化期间并非所有参数都转换
至于使服务器多线程,我需要阅读它,但欢迎提出任何建议。
谢谢。
【问题讨论】:
-
RE 多线程服务器:阅读 ZeroMQ。这是一种使套接字编程更加人性化的尝试。对于只想学习的人来说,它已经过时并且可能过于复杂,但是:文档非常棒,并解释了您在 python 中使用普通套接字编程时可能陷入的陷阱,以及如何在理论上和 ZeroMQ 中克服它们。
-
在我的机器上运行良好 - 如果您希望打印的消息是
TypeError: not all arguments converted during string formatting。 -
第一件事让我大吃一惊的是
c.close完全没有 - 你必须写c.close()才能真正调用该方法。 -
正如上述评论者所说,这确实尝试进行打印然后摔倒。有没有可能你正在做一些奇怪的事情。建立连接时防止服务器的标准输出正确刷新的终端设置?
-
请将运行这些程序时看到的实际输出复制粘贴到您的问题中。
标签: python python-2.7 sockets