Python 3.x 套接字在接收时卡住(python)
因此,我必须在python上编写用于发送文件的脚本,并且在发送所述文件后,服务器必须告诉客户端它工作正常。但是,当客户机等待接收最后一条消息时,它会被卡住(该消息永远不会被发送,尽管它不在while循环中) 服务器Python 3.x 套接字在接收时卡住(python),python-3.x,Python 3.x,因此,我必须在python上编写用于发送文件的脚本,并且在发送所述文件后,服务器必须告诉客户端它工作正常。但是,当客户机等待接收最后一条消息时,它会被卡住(该消息永远不会被发送,尽管它不在while循环中) 服务器 import socket HOST = 'localhost' PORT = 1024 socketServidor = socket.socket(socket.AF_INET, socket.SOCK_STREAM) socketServidor.bind((HOST, POR
import socket
HOST = 'localhost'
PORT = 1024
socketServidor = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
socketServidor.bind((HOST, PORT))
socketServidor.listen(1)
print("esperando...")
s_cliente, addr = socketServidor.accept()
mensaje=s_cliente.recv(1024)
print(mensaje.decode("utf-8"))
respuesta=input()
s_cliente.send(respuesta.encode("utf-8"))
if respuesta=="s":
f = open("hola2.pdf", "wb")
while True:
bytes_read = s_cliente.recv(1024)
if not bytes_read:
break
f.write(bytes_read)
#print("hola")
s_cliente.send("El archivo ha sido recibido correctamente".encode("utf-8"))
#print("adios")
print("El archivo se ha recibido correctamente.")
s_cliente.close()
socketServidor.close()
f.close()
else:
s_cliente.close()
socketServidor.close()
客户
import socket
HOST = 'localhost'
PORT = 1024
s_tcp = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s_tcp.connect((HOST, PORT))
s_tcp.send("¿Quiere recibir archivo? s/n".encode("utf-8"))
recibido=s_tcp.recv(1024)
respuesta=(recibido.decode("utf-8"))
if respuesta=="s":
with open("hola.pdf", "rb") as f:
while True:
bytes_read = f.read(1024)
if not bytes_read:
break
print("hola")
s_tcp.send(bytes_read)
print("adios")
print ("bien")
#s_tcp.send(bytes_read)
recibido = s_tcp.recv(1024)
#print(recibido.decode("utf-8"))
# s_tcp.send(bytes(f, "utf-8")
s_tcp.close()
f.close()
else:
s_tcp.close()
如果停止运行客户端服务器,服务器将自动结束接收文件并成功退出。在发送端关闭套接字之前,接收端永远不会从
.recv()
返回空字符串,在这种情况下,您无法执行此操作,因为您计划发送更多数据。通常的解决方案是在文件数据之前加上一个长度值,以便接收方知道要读取多少。