2014-12-10 5 views
1

UDP 소켓을 통해 데이터를 전송할 수없는 이유는 무엇입니까? 127.0.0.1 대신 127.0.0.2? 수신이 내 수신이127.0.0.1 루프백 주소 이외의 바인딩

>>> import socket 
>>> sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) 
>>> sock.bind(("127.0.0.1", 6666)) 
>>> sock.recvfrom(1024) 
('01', ('127.0.0.1', 7777)) 

을 종료한다

작동하는 것 같다 그리고 이것은 내가 데이터를 전송하는 방법입니다

이제 보내는 내가

>>> sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) 
>>> sock.bind(('127.0.0.2', 7777)) 
>>> sock.sendto(b'01',('127.0.0.1',6666)) 
2 

아무것도처럼 말한다면

>>> sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) 
>>> sock.bind(('127.0.0.1', 7777)) 
>>> sock.sendto(b'01',('127.0.0.1',6666)) 
2 

수신 끝에서 발생합니다. sendto는 .1 주소와 마찬가지로 2를 반환하지만, 수신 끝으로 도착하는 것은 아무것도 없습니다. 좀 더 이상하게하려면 127.0.0.2/6666을 바인드/수신하면 데이터를 제대로 수신 할 수 있습니다. 하지만 다시, 내가 127.0.0.2에서 데이터를 보내면 안돼

이것은 파이썬 2.7.5이고 나는 윈도우 7에서 그것을 실행한다. 나는 여러 IP 주소에 연결을 시뮬레이션 할 수있는 MT 환경을 만들려고 노력하고있다. 같은 컴퓨터. 나는 이것이 파이썬 기능 또는 윈도우 또는 사용자 에러 일지 모르겠다. ...

답변

0

소켓 버퍼에서 다음 1024 바이트 데이터를 받기 위해서는 다시 sock.recvfrom(1024)을 실행해야한다.

그러면 수신 끝 부분에 (b'01', ('127.0.0.2', 7777))이 표시됩니다.

작동 여부를 알려주십시오.

편집 :

Server.py

#!/usr/bin/env python 
# -*- coding:utf-8 -*- 

import socket 

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) 
sock.bind(("127.0.0.1", 6666)) 
while 1: 
    data = sock.recvfrom(1024) 
    print data 

내가

('01', ('127.0.0.1', 7777)) 
('02', ('127.0.0.2', 7777)) 

를 얻을 수 있습니다

#!/usr/bin/env python 
#-*- coding:utf-8 -*- 

import socket 

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) 
sock.bind(('127.0.0.1', 7777)) 
sock.sendto(b'01',('127.0.0.1',6666)) 

sock.close() 
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) 
sock.bind(('127.0.0.2', 7777)) 
sock.sendto(b'02',('127.0.0.1',6666)) 
sock.close() 

client.py이 작동합니까 너를 위해서?

+0

예, 물론 그랬습니다. 루프백 IF를 분명히 감지하는 rawcap.exe 프로그램도 있습니다. .1 주소에서 보낸 도구 바이트는 볼 수 있지만 .2 주소는 아닙니다. 그래서 누군가가 작동하지 않는 송신 측이라는 결론을 내릴 수 있습니다. – fastfox

+0

@fastfox 수신 측에서 메시지를 보지 못했다는 뜻입니까? 하지만 그것은 내 편에서 일합니다. 소켓 바인딩 (127.0.0.1, 7777)을 먼저 닫은 다음 다른 터미널을 열고 (127.0.0.2, 7777)에 새로운 소켓 바인딩을 만든 다음 다시 시도해야합니다. –

+0

예, 발신자가 127.0.0.1 이외의 다른 사람인 경우 수신 측에서 아무 것도 볼 수 없음을 의미합니다. 그것은 실제로 당신을 위해 작동한다면 그것은 매우 이상합니다. 나는 통역사를 다시 열려고 노력했고 몇 번 재부팅하기까지했다. 나는 리눅스 머신에서 같은 라인을 시도해 보았다. – fastfox

관련 문제