【问题标题】:python socket server is hanging after sending data发送数据后python套接字服务器挂起
【发布时间】:2018-01-07 00:58:57
【问题描述】:

我最近创建了一个 python 套接字服务器,它在端口 9777 上侦听,服务器应该接受连接,一旦它接受,您就可以向客户端发送信息。然后客户端将打印出它收到的任何内容。但是,我发现在我发送一些数据后,服务器会挂起,直到我重新初始化一个新连接。这是否有原因,如果有,我该如何防止它发生

服务器的代码是:

import socket
import sys

host='0.0.0.0'
port=9777
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.bind((host,port))
s.listen(10)
c,a=s.accept()
while True: 
    command=raw_input('[input>] ')
    if 'data' in command:
        c.send('continue')
        data=c.recv(1024)
        print data
    else:
        continue

仅当字数据在字符串中时,代码才会发送数据。这是客户端的代码:

import socket
import sys

host='192.168.0.13'
port=9777
while True:
    try:    
        s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
        s.connect((host,port))
    except:
        continue
    while True:
        d=s.recv(9999)
        print d
        s.send('received')

我的目标是在服务器和客户端之间建立连接。我希望服务器能够在 while 循环中接受来自用户的输入并将输入发送到客户端。客户端需要能够接收信息,并且当它接收到时,它将向服务器发送响应。然后用户可以继续向服务器发送数据,直到他们决定终止程序。但是,服务器在向客户端发送一次数据后一直挂起。谁能告诉我如何防止这种情况发生?

【问题讨论】:

  • 确保处理 send() 和 recv() 不会一次返回所有数据的情况。它们返回实际发送/接收的字节数,该数字可能小于您提供的数字。

标签: python sockets networking server


【解决方案1】:

我在我的电脑上试试这个代码,它工作正常,也许你需要将host='192.168.0.13'更改为host='localhost'
host='0.0.0.0'host='localhost'
看这张照片
如果此问题仍然存在,则可能您的 IP 地址与网络中的其他设备相同,因此请尝试运行此命令 ipconfig /renew

【讨论】:

    猜你喜欢
    • 2014-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多