Python套接字发送EOF

age*_*s04 14 python sockets

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

我需要发送一个确认一旦传输从目标到源

代码目的地

s.accept()
f = s.makefile()
f.read(1024)
Run Code Online (Sandbox Code Playgroud)

源代码

s.connect(('localhost',6090))
f = s.makefile()
f.write('abcd') 
f.flush()
Run Code Online (Sandbox Code Playgroud)

这就出现了问题,因为"abcd"不是1024字节,目标将阻塞直到收到1024字节
解决方案是关闭()套接字,但由于我需要从目标确认,我无法关闭套接字.
如何告诉目的地停止阻止?我正在考虑写一个EOF角色,我在网上读到"\ x04"是EOF,但它不起作用.
此外,由于数据可能是二进制的,我不想使用readline()方法.

Mar*_*nen 7

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

客户

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()
Run Code Online (Sandbox Code Playgroud)

服务器

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'
Run Code Online (Sandbox Code Playgroud)