Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从套接字接收数据时脚本挂起_Python_Python 3.x_Socketserver - Fatal编程技术网

Python 从套接字接收数据时脚本挂起

Python 从套接字接收数据时脚本挂起,python,python-3.x,socketserver,Python,Python 3.x,Socketserver,这是我从客户端接收数据的Python脚本: import time import socket HOST = '' PORT = 8888 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) print('Socket created') try: s.bind((HOST, PORT)) except socket.error as socketError: print('socket binding failed,

这是我从客户端接收数据的Python脚本:

import time
import socket

HOST = ''
PORT = 8888
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print('Socket created')

try:
    s.bind((HOST, PORT))
except socket.error as socketError:
    print('socket binding failed, ', socketError)
    print('Exiting...')
    sys.exit(0)

print('Socket binding complete')

s.listen(1)
print('Socket listening for connection...')

conn, addr = s.accept()

print('connected to ', addr[0])

bfr = b''
try:
    while True:
        while True:
            temp = conn.recv(1024)
            print('temp is ',temp.decode('utf-8'))
            print('buffer value ', bfr.decode('utf8'))
            if not temp:
                break
            bfr += temp;
        data = bfr.decode('utf-8')
        bfr = b''
        print('value received,', data)
        if data == 'Connection-Ready to receive commands':
            print('')
        #other conditions
except Exception as loopException:
    print("Exception occurred in loop, exiting...")
finally:
    s.close()
脚本在打印后挂起
连接到192.168.4.197
并且不接受来自客户端的任何命令。如果客户端断开连接,将打印所有发送命令

为什么会这样

更新1
尝试删除内部while并添加了一个
time.sleep(.10)
,脚本没有挂起,但只有第一个命令按原样打印,其余命令在第一个字符后使用换行符打印,例如,如果我发送10,它将先打印1,然后在另一行打印0。我只想在从客户端发送命令时获取命令,每个命令都是一个单词。

也许可以尝试
发送所有数据以确保从客户端发送完整的数据?

也许可以尝试
发送所有数据以确保从客户端发送完整的数据?

客户端是Java在这种情况下,确保客户端调用
flush
以刷新每个命令。是的,我有写入输出流后添加的刷新尝试了随时间添加延迟。sleep(10)但仅在客户端为Java时才起作用。在这种情况下,确保客户端调用
flush
刷新每个命令。是的,我在写入输出流后添加了flush尝试了随时间添加延迟。sleep(10)但是它只在您的
try
/
中起作用,除非
抑制各种异常。如果删除它,是否会引发任何错误?如果是这样的话,请给出一个完整的回溯(尽管仅仅从查看它就可以明显看出哪里出了问题)。不,即使没有尝试例外,它也会挂断您的
尝试
/
,除非
会抑制各种异常。如果删除它,是否会引发任何错误?如果是这样的话,请给出一个完整的回溯(尽管仅仅从看它可能很明显出了什么问题)。不,即使不尝试,它也会挂断