python - 使用 Python 脚本和 netcat 转发消息

标签 python sockets ubuntu apache-kafka localhost

我正在尝试将终端输出流(在终端 T1 中)转发到本地主机端口,在终端 T2 上收听。然后,使用一个简单的 Python 套接字脚本来捕获该流数据并将其打印出来。我引用了this post对于 ubuntu 命令和 this post对于 Python 套接字脚本:
情况一:
在终端 T2 中,我首先运行:监听 2003 端口

nc -l 2003
然后在终端 T1 中运行流式传输命令 (Kafka)。 kafka 服务器位于 9092 端口:
.bin/kafka-console-consumer --topic <topic_name> --from-beginning --bootstrap-server <dns:port> | pv | netcat localhost 2003
在这种情况下,我可以看到流数据显示在 T2 上。因此,流已从 Kafka 终端发送到另一个端口,由另一个进程监听。
情况2:
这是我在终端 T3 上运行的 Python 代码
import socket
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect(('localhost', 2003))
while True:
    data = client_socket.recv(512)
    if len(data) > 0:
        print("RECEIVED: %s" % data)
顺序是:我运行 T2,在 T3 中运行 Python 代码,然后在 T1 中运行 Kafka 命令。这一次,我在 T3 或 T2 中都看不到任何消息。
目的是通过中间转发器使用 Python 脚本捕获 Kafka 流式传输的数据。这是正确的方法还是有什么方法可以做到这一点?

最佳答案

您的 Kafka 和 Python 作为客户端工作,nc -l 2003作为服务器。
存在三个问题。

  • 此服务器只能从一个客户端接收值。
  • Python 等待来自服务器的数据,但该服务器什么也不发送。
  • 该服务器没有从一个客户端发送到另一个客户端的功能。

  • 您应该使用 Python 创建服务器并使用它而不是 nc这是一个简单的服务器,您可以使用它来代替 nc -l 2003
    import socket
    
    server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    server.bind(('localhost', 2003))
    server.listen(1)
    
    print('WAITING FOR CLIENT')
    s, addr = server.accept()
    print('CONNECTED:', addr)
    
    try:
    
        while True:
            data = s.recv(512)
            if not data:
                break
            print("RECEIVED:", data.decode())
    
    except KeyboardInterrupt:
        print('STOPPED by CTRL+C')
    finally:    
        s.close()
        server.close()
    

    关于python - 使用 Python 脚本和 netcat 转发消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68027990/

    相关文章:

    java - Java 移位操作实现背后的逻辑

    python - Moto 不会 mock DynamoDB

    java.net.BindException : Cannot assign requested address on Heroku

    c++ - 通过代理使用套接字发出 HTTP 请求

    mysql - 无法从其他目录访问mysql

    c - 为什么我收到错误 undefined reference to `getche' ?

    python - Pandas 在groupby中表示跨行和列

    python - 如何有效地将多个列添加到 pandas 数据框中,其值依赖于其他动态列

    c++ - QThread 中未收到 udp 数据包

    linux - stat 在命令行中起作用,但在传递给变量时不起作用