【发布时间】:2009-11-26 17:56:48
【问题描述】:
我是 Python 新手(尽管我已经使用 Java 编程多年了),并且我正在开发一个简单的基于套接字的网络应用程序(只是为了好玩)。这个想法是我的代码连接到一个远程 TCP 端点,然后监听从服务器推送到客户端的任何数据,并对此执行一些解析。
从服务器 -> 客户端推送的数据是 UTF-8 编码的文本,每行由CRLF (\x0D\x0A) 分隔。你可能猜到了:这个想法是客户端连接到服务器(直到被用户取消),然后读取并解析进入的行。
我已经设法让它发挥作用,但是,我不确定我这样做是否完全正确。因此,因此我的实际问题(要遵循的代码):
- 这是在 Python 中执行此操作的正确方法(即,真的这么简单吗)?
- 关于缓冲区/
asyncore的任何提示/技巧/有用资源(参考文档除外)?
目前,数据的读取和缓冲如下:
def handle_read(self):
self.ibuffer = b""
while True:
self.ibuffer += self.recv(self.buffer_size)
if ByteUtils.ends_with_crlf(self.ibuffer):
self.logger.debug("Got full line including CRLF")
break
else:
self.logger.debug("Buffer not full yet (%s)", self.ibuffer)
self.logger.debug("Filled up the buffer with line")
print(str(self.ibuffer, encoding="UTF-8"))
ByteUtils.ends_with_crlf 函数只检查缓冲区的最后两个字节是否有\x0D\x0A。第一个问题是主要问题(答案基于此),但任何其他想法/提示都值得赞赏。谢谢。
【问题讨论】:
-
我很好奇你的代码中的 ByteUtils 在哪里,所以我用谷歌搜索了“python ByteUtils”......谷歌给了我这个线程 - 在它创建后 15 分钟!这令人印象深刻:)
标签: python sockets buffer asyncore