2014-08-27 3 views
1

요약

수신중인 장치에 확인 응답을 보내는 python udp 수신기에 기능을 추가하고 있습니다. 제 경우에는 장치가 localhost이지만 MT4000 원격 측정 장치가 될 것입니다.Python : recvfrom() 함수에서 수신 한 주소를 문자열로 변환하는 방법은 무엇입니까?

문제

I 데이터를 전송하는 장치로부터 데이터 및 소스 어드레스를 수신하기에 recvfrom() 함수를 사용하고있다. 반환 값은 쌍 (문자열, 주소)입니다. 여기서 string은 수신 된 데이터를 나타내는 문자열이고 address는 데이터를 보내는 소켓의 주소입니다. 이 문제는 주소에 초점을 맞추고 있습니다. 주소는이 소스 I.P이 127.0.0.1 즉 localhost를 의미 이해

('127.0.0.1', 57121)

을 반환하고, 57,121는 데이터를 통해 전송 된 포트를 나타냅니다. 내 목표는 승인을 다시 보내기 위해이 데이터를 분할하는 것입니다. data, addr = s.recvfrom(1024)

는 지금까지이 방법을 시도 ((socket.AF_INET, socket.SOCK_DGRAM) S = socket.socket) :

내 솔루션

코드 나 데이터를 수신 한이입니다 데이터를 백업 분할의 :

,536 :

sourceIp = addr[3:-9] 

을 나는이 같은 문자열을 분할해야한다는 인상이었다

sourceIp = 127.0.0.1

그것은 않습니다 그러나에만 출력이 : ()

순간 내 생각이 실제로 문자열이 아닌, 그래서 분열의 방법이 작동하지 않습니다. 다른 방법으로 나누는가, 또는 개조하는 방법이 있습니까? 감사.

답변

3

('127.0.0.1', 57121)tuple이며, 두 항목이있는 변경 불가능한 컨테이너입니다.

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

아니면 data, addr = ...와 함께했던 것처럼 당신은 그것을 압축을 풀 수 있습니다 :

가/포트 IP를 얻으려면 다음과 같이 그것을 할

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

또는 심지어 단락 방법 :

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

똑똑하고, 내가 찾고 있던 똑똑한 대답 : D –

+0

고맙다. 너는 나를 많이 도왔다! – frank17

관련 문제