Python套接字-消​​息并非总是在服务器上注册

时间:2018-10-12 00:31:29

标签: python websocket socket.io

在尝试熟悉套接字库时,我有一个简单的服务器和客户端设置。基本上,我偶然发现并能够建立连接,并使服务器和客户端能够相互通信。为了使其更具交互性,我使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

1 个答案:

答案 0 :(得分:0)

在套接字中,您没有实现__exit__的方法,因此不能使用with conn: 您需要删除这部分代码。