2014-07-11 41 views
0

我正在研究一些概念研究研究項目的證明,並有python udp套接字服務器來監聽收到的數據。 客戶端將UDP上的數據NAME和FAMILY NAME發送到服務器。 我想在UDP套接字服務器端收到該數據,並在接收時將此數據發送到帶有兩個字段f_name和l_name的mysql數據庫。Python的udp服務器解析併發送收到的數據到MySQL

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 sniffer來解決,但那會很髒。 概念我想喜歡有TI的東西: 1. SOCEKT服務器接收收到 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服務器,我看不到任何消息,因此似乎函數解析數據不能與服務器一起工作。 任何幫助或指導,將不勝感激

+0

你的問題是什麼?有什麼異常? – shazin

+0

如果在def解析(數據)函數中,我看不到任何數據。如果只是啓動udp服務器,我看到控制檯上的數據即將到來,但我想在發送到數據庫的功能 – user1627588

回答

0

在您的服務器,當你收到data你不叫parse function.You只是打印的data內容。添加註釋並查看結果。

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