【问题标题】:Listening to port and capturing data in python在python中监听端口和捕获数据
【发布时间】:2015-02-23 20:30:41
【问题描述】:

我正在使用 C 语言中的应用程序将连续数据发送到指定端口。我可以使用“腻子”(使用 telnet 127.0.0.1 端口 30003)查看传入数据。

现在我想捕获该数据进行处理。请指教如何在python中做到这一点?

数据以每秒 5 行的速度逐行流动。我应该逐行读取数据进行处理并在窗口中显示。

【问题讨论】:

  • 您的申请在C 或python?
  • 你需要使用socket编程

标签: python


【解决方案1】:

这听起来像是家庭作业……你还没有尝试过。

在 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 秒接收一次数据并将其打印出来。我希望你能根据自己的需要调整它。

来源:Basic Python client socket example

【讨论】:

  • 嘿,很抱歉没有尝试一下。其实我尝试了几个选项,但都失败了。您的代码完美运行。我可以问一个问题吗?正如我提到的,数据流不是连续的,它沉默了一段时间,然后就这样了。那么除了循环之外还有其他选择,以便在数据到来时接收数据,而不是每 5 秒检查一次?谢谢
  • @ManojPJoseph 可能会避免该循环,但始终使用循环。服务器始终检查是否有任何传入连接。无限循环工作得很好,很多事情都是这样工作的。我有时也会尽量避免它们,但你总是不得不做一些类似的事情(我根据我的经验说,可能有些事情我不知道)。
【解决方案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

【讨论】:

  • 他说`捕获数据进行处理`
  • 我终于编写了通过套接字接收数据的程序: from socket import * HOST = 'localhost' PORT = 30003 #our port from before ADDR = (HOST,PORT) BUFSIZE = 4096 sock = 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 return for line in readlines(sock): print line
猜你喜欢
  • 1970-01-01
  • 2011-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多