2014-08-27 38 views
1

摘要

我正在向python udp監聽器添加一個功能,該監聽器向它正在接收的設備發回一個確認。就我而言,目前該設備是本地主機,但未來將是MT4000遙測設備。Python:如何將recvfrom從recvfrom()函數轉換爲字符串?

問題

我使用recvfrom的()功能,以接收從所述設備發送數據的數據和源地址。返回值是一對(字符串,地址),其中字符串是表示接收數據的字符串,地址是發送數據的套接字的地址。這個問題我們專注於地址。該地址被返回

('127.0.0.1', 57121)

我明白這意味着源腹膜內是127.0.0.1即本地主機,而表示該數據已通過發送端口。我的目標是將這些數據分開以發回確認。

我的解決辦法

代碼我已經接收到該數據是這樣的: (S = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)) data, addr = s.recvfrom(1024)

到目前爲止我曾嘗試這種方法分手了數據:

sourceIp = addr[3:-9] 

我的印象中,這應該拆分字符串作爲這樣的:

sourceIp = 127.0.0.1

但它確實只輸出這樣的:()

我當時的想法是,這實際上不是一個字符串,因此分裂的這種方法是行不通的。還有另一種分裂方式或轉換方法嗎?謝謝。

回答

3

('127.0.0.1', 57121)是一個tuple,有兩個項目的不可變容器。

要獲得IP /端口做這樣的:

data, addr = s.recvfrom(1024) 
ip = addr[0] 
port = addr[1] 

還是喜歡你data, addr = ...做,你可以解開它:

data, addr = s.recvfrom(1024) 
ip, port = addr 

或者更短的方法:

data, (ip, port) = s.recvfrom(1024) 
+0

輝煌,正是我所尋找的,輝煌的答案:D – 2014-08-27 10:32:02

+0

謝謝你,你幫了我很多! – frank17 2016-10-23 12:44:10