Python UDP服务器解析并发送接收数据到MySQL

0 投票
1 回答
2639 浏览
提问于 2025-04-18 12:55

我正在做一个概念验证的研究项目,使用Python写了一个UDP套接字服务器,用来接收数据。客户端通过UDP发送名字和姓氏到服务器。我希望在UDP套接字服务器上接收到这些数据后,把它们存入MySQL数据库,字段分别是f_name(名字)和l_name(姓氏)。

import socket

UDP_IP = "192.168.1.10"
UDP_PORT = 9000

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.bind((UDP_IP, UDP_PORT))
print "UDP SERVER STARTED!"

while True:
    data, addr = sock.recvfrom(1024) # buffer size is 1024 bytes
    print "MSG Received:", data

这个例子是从网上找的,使用这个服务器我能在控制台上看到数据。我希望能像下面这样处理,当然代码或概念可以改动。这个问题可能可以用scapy嗅探器来解决,但那样有点麻烦。概念上我想要的是这样的流程: 1. 套接字服务器接收到数据 2. 解析接收到的数据并把它发送到MySQL

我开始的时候是这么想的,但现在不太管用。

import socket
import MySQLdb

UDP_IP = "192.168.1.10"
UDP_PORT = 9000

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.bind((UDP_IP, UDP_PORT))
print "UDP SERVER STARTED!"

while True:
    data, addr = sock.recvfrom(1024) # buffer size is 1024 bytes
    print "received message:", data

def parse(data):
    db = MySQLdb.connect("localhost","db_user","db_pass","directory_db")
    cursor = db.cursor()
    # Params to insert into DB
    f_nameObj = re.search(r'NAME: (.*?) .*', data, re.M|re.I)
    if f_name:
        f_name = f_nameObj.group(1)

    l_nameObj = re.search(r'SURNAME: (.*?) .*', data, re.M|re.I)
    if l_name:
        l_name = l_nameObj.group(1)

    # MySQL EXECUTION
    cursor.execute("""
    INSERT INTO dictionary (f_name, l_name) VALUES (%s, %s)""",(f_name,l_name))
    #
    db.commit()

用这种UDP服务器我看不到任何消息,所以似乎解析数据的功能在服务器上不工作。任何帮助或指导都会很感激。

1 个回答

0

在你的服务器上,当你收到 data 时,你并没有调用 parse 函数。你只是把 data 的内容打印出来。加上那行带注释的代码,然后看看结果。

while True:
    data, addr = sock.recvfrom(1024) # buffer size is 1024 bytes
    print "received message:", data
    parse(data) # Call the Function

撰写回答