socket 发消息失败

passself 2020-09-29 11:35:58
client 发一个消息,server回复一个消息
sever端代码如下:(这个是成功的)


def send_back_no_header(newSocket,response,isNeedHeader=True):

try:

print('send_back_no_header response is:',response)

jresp = json.dumps(response)

final_resp = bytes(jresp,encoding="utf-8")

print("final_resp is:",final_resp)

if isNeedHeader:

length_resp = len(final_resp)

print("length_resp is:",length_resp)

resp_len = struct.pack('i',length_resp)

print("resp_len is:",resp_len)

newSocket.send(resp_len)

newSocket.send(final_resp)

print("end send ")

except Exception as e:

print('send_back_no_header e is:',e)


但是client 发送了一个文件后,server端接收到消息然后下载文件。
下载过程前后想给client 回传消息,告诉client端 server正在做什么,但是无论再接收文件数据之前还是接收文件数据完成后,再次发送给client消息都报错,代码和上面的一样。
报错内容是:

descriptor 'send' requires a '_socket.socket' object but received a 'bytes'

另注明:接收文件数据和回传client消息都是在一个线程

期待大佬给个思路
...全文
191 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
tianfang 2020-09-29
  • 打赏
  • 举报
回复
https://www.jianshu.com/p/7a63d0a210f2 3. 更完善的代码 在 MyHandler 增加功能
tianfang 2020-09-29
  • 打赏
  • 举报
回复
python ftpd https://github.com/giampaolo/pyftpdlib https://github.com/ezyang/git-ftp 客户端也有很多
passself 2020-09-29
  • 打赏
  • 举报
回复
引用 1 楼 tianfang 的回复:
协议定义的质量问题 基于socket的双向通讯协议最重要,你的需求完全可以在FTP协议上增加几个命令处理即可 二进制数据和文本数据处理方式不一样。你的需求中两种都需要,就需要把协议定义完善
感谢,如果可以甩几个地址。 我已经找到问题了,犯了个低级的错误
passself 2020-09-29
  • 打赏
  • 举报
回复
python 默认的是双向通信的啊,彼此发消息也可以,但是为啥接收完二进制数据后,就不能再发了呢,不接收也不能再发了。
tianfang 2020-09-29
  • 打赏
  • 举报
回复
协议定义的质量问题 基于socket的双向通讯协议最重要,你的需求完全可以在FTP协议上增加几个命令处理即可 二进制数据和文本数据处理方式不一样。你的需求中两种都需要,就需要把协议定义完善

37,719

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧