2014-12-31 6 views
5

ho un semplice server UDP implementato in Python:presa Python funziona su LAN ma non oltre Wifi

import socket 

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) 
sock.bind(("",10005)) 

while True: 
    data = sock.recv(1024) 

ho eseguito questo codice sul computer A. mando comandi UDP dal computer B in queste due situazioni:

  1. Entrambi A e B sono collegati a un router in una rete locale tramite cavo LAN.
  2. Entrambi A e B sono collegati al router tramite Wi-Fi.

I pacchetti UDP vengono ricevuti in situaltion 1 (cavo LAN) ma non nella situazione 2 (tramite Wi-Fi). In entrambi i casi Wireshark mostra il pacchetto ricevuto sul computer A. Qualche idea?

SO: Windows

Il programma client:

import socket 
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) 
sock.sendto(char,("192.168.1.107",10005)) 
sock.close() 

sono venuto vicino a trovare la soluzione. Windows sta lasciando cadere i pacchetti UDP. Ho controllato con il comando netstat -s -p UDP. Ogni volta che il computer mittente invia i pacchetti UDP, gli errori di ricezione aumentano. Ora devo solo capire perché i pacchetti vengono ricevuti erroneamente.

Modifica L'ho provato su altri computer. Funziona. Ho cambiato il firewall sul computer dove non funziona, ma non riesco ancora a capire cosa stia filtrando il pacchetto UDP.

+1

Qual è il programma client e quale versione di Windows stai usando? – rlms

+0

Windows 7. Programma client semplificata usati: presa import calzino = socket.socket (socket.AF_INET, socket.SOCK_DGRAM) sock.sendto (char, ("192.168.1.107", 10005)) sock.close () – user3098466

+0

Puoi eseguire 'netstat -r' e mostrare l'output qui. –

risposta

0

Controllare l'impostazione di attendibilità sulla rete Wifi per il server. Secondo this article da Microsoft:

Ad esempio, un programma che accetta connessioni in ingresso dal Internet (come un programma di file sharing) potrebbe non funzionare nel profilo pubblico perché l'impostazione predefinita di Windows Firewall bloccherà tutto connessioni in ingresso a programmi che non sono nell'elenco dei programmi consentiti .

Credo che per impostazione predefinita le reti Wifi siano inserite nel profilo Pubblico, quindi sembra che stia succedendo qui. Poiché sai che il pacchetto sta arrivando OK (modulo wireshark), la spiegazione più probabile è che il firewall si rifiuta di consegnarlo per te.

L'alternativa sarebbe aggiungere python allo allowed programs list se non si è del tutto fiduciosi della rete.