gpt4 book ai didi

Python套接字发送EOF

转载 作者:太空狗 更新时间:2023-10-29 17:19:20 25 4
gpt4 key购买 nike

我有一个简单的文件传输套接字程序,其中一个套接字发送文件数据,另一个套接字接收数据并写入文件

从目标到源的传输完成后,我需要发送一个确认

目的地代码

s.accept()
f = s.makefile()
f.read(1024)

源代码

s.connect(('localhost',6090))
f = s.makefile()
f.write('abcd')
f.flush()

问题来了,因为“abcd”不是1024字节,目的地会阻塞直到收到1024字节
解决方案是 close() 套接字,但由于我需要来自目的地的确认,所以我无法关闭套接字。
我如何告诉目的地停止阻塞?我正在考虑写一个 EOF 字符我在网上看到“\x04”是EOF,但是不行。
此外,由于数据可能是二进制的,我不想使用 readline() 方法。

最佳答案

设计关于如何发送消息的协议(protocol)(客户端和服务器之间的协议(protocol))。一种简单的方法是“第一个字节是消息的长度,后面是消息”。粗略的例子:

客户端

Python 2.6.5 (r265:79096, Mar 19 2010, 21:48:26) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> from socket import *
>>> s=socket()
>>> s.connect(('localhost',5000))
>>> f=s.makefile()
>>> f.write('\x04abcd')
>>> f.flush()

服务器

Python 2.6.5 (r265:79096, Mar 19 2010, 21:48:26) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> from socket import *
>>> s=socket()
>>> s.bind(('localhost',5000))
>>> s.listen(1)
>>> c,a=s.accept()
>>> f=c.makefile()
>>> length=ord(f.read(1))
>>> f.read(length)
'abcd'

关于Python套接字发送EOF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3788439/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com