在尝试熟悉套接字库时,我有一个简单的服务器和客户端设置。基本上,我偶然发现并能够建立连接,并使服务器和客户端能够相互通信。为了使其更具交互性,我使client.py能够通过命令行发送文本。一切似乎都正常工作(如果客户端输入为空,则服务器端正常断开连接除外),如果我从客户端键入一条消息,它将立即吐给我。在此示例中,我为服务器端设置了打印文本的功能。我注意到的是,服务器端始终不会“注册”从客户端发送来的内容。我试图弄清楚为什么会这样。对于测试,它并没有真正影响任何事情,我只是无法弄清楚幕后发生的事情。
编辑: 实际上,经过一段时间的使用,似乎所有其他消息都被打印到服务器控制台。我还没有弄清楚为什么会这样
服务器端:
#server.py
import socket
ss = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
ss.bind(('127.0.0.1',5000))
ss.listen(5)
while True:
conn, addr = ss.accept()
with conn:
print ('Connected by', addr)
while True:
data = conn.recv(4096)
print (data)
if not data:
print ("nothing received from client")
ss.close()
break
客户端:
#client.py
import socket
server = 'localhost'
port = 5000
s = socket. socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('127.0.0.1', 5000))
s.send(bytes(b'Client has connected'))
while True:
msg = input()
s.send(bytes(input(msg),'utf-8'))
if not msg:
print ("Server should tear down connection...")
# s.close()
break
答案 0 :(得分:0)
在套接字中,您没有实现__exit__
的方法,因此不能使用with conn:
您需要删除这部分代码。