【问题标题】:send and receive a file in python sockets在 python 套接字中发送和接收文件
【发布时间】:2015-10-27 23:14:38
【问题描述】:

这个问题大部分都得到了回答here 在收到整个文件后,我一直在尝试修改服务器(发送)和客户端(接收)来自服务器的反馈。

下面是客户端服务器代码;因为目前客户端和服务器都挂起。 IE。无限期进入“忙碌”状态(客户端和服务器都不做任何事情,直到服务器上的 ctrl-c 在此处报告失败“l = sc.recv(1024)”并且客户端上的 ctrl-c 在此处报告失败“reply =s.接收 (1024)")

import socket
import sys
s = socket.socket()
s.bind(("localhost",3000))
s.listen(10)
i=1
while True:
    sc, address = s.accept()
    print address
    f = open('tranmit.jpg",'wb') #open in binary
    l = 1
    while(l):
        l = sc.recv(1024)
        while (l):
            f.write(l)
            l = sc.recv(1024)
        f.close()
        sc.send("received") # Would like to send back a response

    sc.close()

s.close()
------------------------------------------------------------
#client
s = socket.socket()
s.connect(("localhost",3000))
f=open ("tranmit.jpg", "rb") 
l = f.read(1024)
while (l):
    s.send(l)
    l = f.read(1024)
reply =s.recv(1024) # Feedback: would like the receive feedback from the server.
print reply
s.close()

在没有添加反馈行的情况下,代码可以正常工作(如上面的链接中所示),有没有人知道如何保持这个与反馈一起工作? 谢谢。

【问题讨论】:

    标签: python sockets


    【解决方案1】:

    您的客户必须以某种方式表明整个文件已发送。就目前而言,您的服务器无法知道客户端的发送操作何时完成。

    一种解决方案是在所有传输完成后致电socket.shutdown。这是您的客户端程序的新版本。您的服务器程序不需要任何更改。

    #client
    import socket
    s = socket.socket()
    s.connect(("localhost",3000))
    f=open ("tranmit.jpg", "rb")
    l = f.read(1024)
    while (l):
        s.send(l)
        l = f.read(1024)
    s.shutdown(socket.SHUT_WR)
    reply =s.recv(1024) # Feedback: would like the receive feedback from the server.
    print reply
    s.close()
    

    【讨论】:

    • 我想我可能会再次寻求与此类似的帮助,因此它适用于来自服务器的响应之类的字符串/文本,但是“reply =s.recv(1024)”客户端代码似乎当您在服务器端引入函数调用时无限期挂起,特别是如果该函数需要超过 60 秒才能运行......有什么想法吗?虽然服务器完成运行函数调用并返回结果,但该结果永远不会到达客户端进程。提前致谢
    • 这听起来像是一个全新的问题。按照How to Askminimal reproducible example 中的指导方针,请在 Stack Overflow 上发布一个新问题。
    猜你喜欢
    • 2014-07-31
    • 1970-01-01
    • 2010-11-14
    • 2016-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-21
    • 2013-04-01
    相关资源
    最近更新 更多