当前位置:  开发笔记 > 编程语言 > 正文

python中的套接字故障

如何解决《python中的套接字故障》经验,为你挑选了1个好方法。

我有一个用C编写的服务器,我想在python中编写一个客户端.当python客户端想要发送文件,然后是文件的内容和字符串"end some_file"时,它将发送一个字符串"send some_file".这是我的客户端代码:

file = sys.argv[1]
host = sys.argv[2]
port = int(sys.argv[3])
sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
sock.connect((host,port))
send_str = "send %s" % file
end_str = "end %s" % file
sock.send(send_str)
sock.send("\n")
sock.send(open(file).read())
sock.send("\n")
sock.send(end_str)
sock.send("\n")

问题是这样的:

服务器从recv接收"send some_file"字符串

在第二个recv中,文件的内容和"结束文件"字符串一起发送

在服务器代码中,缓冲区的大小是4096.我在尝试发送小于4096k的文件时首先注意到这个错误.如何确保服务器独立接收字符串?



1> Brian R. Bon..:

使用套接字编程,即使您执行2次独立发送,也不意味着另一方将接收它们作为2个独立的recv.

一个适用于字符串和二进制数据的简单解决方案是:首先发送消息中的字节数,然后发送消息.

以下是每条消息应该做的事情,无论是文件还是字符串:

发件人方:

发送4个字节,保存以下发送中的字节数

发送实际数据

接收方:

从接收器端执行一个循环,阻止读取4个字节

然后在读取上执行一个块,以获取前4个字节中指定的字符数以获取数据.

除了我上面提到的4字节长度标头之外,您还可以添加一个常量大小的命令类型标头(再次整数),它描述了以下recv中的内容.

你也可以考虑使用像HTTP这样的协议,它已经为你做了很多工作,并且有很好的包装库.

推荐阅读
惬听风吟jyy_802
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有