在Python中监听端口并捕获数据

7
我正在使用一个用C编写的应用程序,该应用程序将连续数据发送到指定端口。我可以使用“Putty”(使用Telnet 127.0.0.1端口30003)查看传入的数据。
现在我想捕获这些数据进行处理。请告诉我如何在Python中实现此操作?
数据以每秒5行的速度逐行流动。我应该逐行读取数据以进行处理,并将其显示在窗口中。

你的应用程序是用 C 还是用 Python 编写的? - Bhargav Rao
2
你需要使用套接字编程。 - Avinash Babu
2个回答

13
这听起来像是作业...你还没有尝试去做它。
在Python中,为了接收和发送数据(并且肯定是交换数据),我们使用一个叫做socket的库。你需要两个脚本,一个是服务器端(你已经用C语言编写了)和一个客户端脚本。
# client example

import socket, time
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect(('localhost', 5000))
while True:
    time.sleep(5)
    data = client_socket.recv(512)
    if data.lower() == 'q':
        client_socket.close()
        break

    print("RECEIVED: %s" % data)
    data = input("SEND( TYPE q or Q to Quit):")
    client_socket.send(data)
    if data.lower() == 'q':
        client_socket.close()
        break

这是一个客户端脚本示例,每5秒接收一次数据并将其打印出来。我希望您可以根据自己的需要进行适当的修改。
源代码:基本的Python客户端套接字示例

嗨,很抱歉没有尝试过。实际上我尝试了几个选项但都失败了。你的代码完美地运行了。我可以问一个问题吗?正如我所提到的,数据流不连续,它沉默了一段时间,然后才出现。那么除了循环之外,是否有其他选项可以在数据到达时接收它,而不是每5秒检查一次?谢谢 - Manoj P Joseph
@ManojPJoseph 可以避免使用循环,但总是要使用循环。服务器始终在检查是否有任何传入连接。无限循环可以正常工作,许多事情都可以这样做。我有时也会尝试避免使用它们,但你总是需要做一些这样的事情(我从我的经验中说,可能有些我不知道的东西)。 - user4396006

2

安装 tcpflow

运行给定的脚本

import os

INTERFACE = "lo"

PORT = "30003"

os.system("tcpflow -i %s port %s" % (INTERFACE, PORT))

它会将来自端口的请求写入一个文件,格式为127.000.000.001.06080-127.000.000.001.6347,并存储在脚本所在的位置。


1
他说:“捕获数据以进行处理”。 - user4396006
我终于写好了通过套接字接收数据的程序:from socket import *HOST = 'localhost' PORT = 30003 #我们之前使用的端口 ADDR = (HOST,PORT) BUFSIZE = 4096sock = socket(AF_INET,SOCK_STREAM) sock.connect((ADDR))def readlines(sock, recv_buffer=4096, delim='\n'): buffer = '' data = True while data: data = sock.recv(recv_buffer) buffer += data while buffer.find(delim) != -1: line, buffer = buffer.split('\n', 1) yield line returnfor line in readlines(sock): print(line) - Manoj P Joseph

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接