python - 如何使用生成器在换行符上拆分套接字读取数据

标签 python sockets

我有一个简单的生成器,它从套接字读取数据并在接收到数据时生成每个数据 block 。

while True:
    data = s.recv(512)
    if not data:
        break
    yield data

数据看起来像一个 csv 文件,因此包含换行符。如何更改我的代码以生成文本行而不是缓冲区大小?我玩过 split('\n'),但总是卡在如何检测最后一个 block 可能不是完整行的事实上,我需要等待下一个数据 block 。

谢谢。

最佳答案

您可以调用 socket.makefile()然后使用文件对象(遍历行或调用 .readline()):

import socket
from contextlib import closing

with closing(socket.socket(socket.AF_INET, socket.SOCK_STREAM)) as s:
    s.connect(("127.0.0.1", 8080))
    s.sendall("GET / HTTP/1.0\r\n\r\n")

    with closing(s.makefile()) as f: #NOTE: closed independently
        for line in f:
            print line,

    s.shutdown(socket.SHUT_WR)

关于python - 如何使用生成器在换行符上拆分套接字读取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5848087/

相关文章:

.net - 如何在.Net套接字中监听多个地址?

c++ - 使用 netlink 获取进程 inode

Python正则表达式: search . txt文件字符串

python - 为什么 python 中的列表操作在函数范围之外运行?

python - 从 python 嵌套列表在 pandas 中创建新列

java - 如何在 Java 中发送原始 SOAP 请求?

javascript - 主机Socket.IO离线

PHP 脚本作为 Debian 中的守护进程

python - 在 svg 中设置默认单位(Python svgwrite)

python - 如何全局或永久更改 Anaconda python 环境