2017-10-02 5 views
0

Je lance un programme socket en python pour communiquer avec un périphérique embarqué. Je suis en mesure d'envoyer le paquet et d'obtenir la réponse immédiatement, que je peux vérifier via Wireshark. Le problème je ne suis pas capable de le capturer dans le mon code, mais je suis capable de voir la réponse dans le Wireshark. Le code ci-dessous a envoyé et reçu combiné. Si je divise le test et que je suis en mesure de voir recevoir l'accusé de réception dans l'application elle-même. Je soupçonne que la réponse est très rapide à tel point que mon application l'a manqué. Toute aide est appréciable.Impossible de recevoir le paquet car il arrive rapidement en python

import socket 
import select 
from binascii import unhexlify 
from threading import Thread 
import time 


def client(): 
    UDP_IP_ADDRESS = "192.168.1.10" 
    UDP_PORT_NO = 4010 
    clientSock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM ) 
    clientSock.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1) 
    packetToSend="" 

    messageToSend = raw_input("Message to Send :") 

    # if messageTOSend too big send as multiple packets 
    packetsToSend = addpack(messageToSend) 

    for count, currentPacket in enumerate(packetsToSend): 

     print "\nData Packet %d:"%count 

     print currentPacket 
     packetToSend = "".join(map(chr, currentPacket)) 
     clientSock.sendto(packetToSend, (UDP_IP_ADDRESS, UDP_PORT_NO)) 
     time.sleep(1) 
    print "packets sent"  

def server(): 
    UDP_IP_ADDRESS = "" 
    UDP_PORT_NO = 4011 
    print "waiting for data" 
    serverSock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) 
    serverSock.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1) 

    serverSock.bind((UDP_IP_ADDRESS, UDP_PORT_NO)) 
    while True: 
     data, addr = serverSock.recvfrom(1024) 
    time.sleep(5) 
    print "Message: ", data 



if __name__=='__main__': 

    a = 0 
    try: 
     Thread(target=server).start() 
     Thread(target=client).start() 
    except Exception, errtxt: 
     print errtxt 
+0

La boucle dans 'server' rejette les messages reçus (c'est-à-dire pas de' print'ing). A part ça, il n'y a rien de mal fonctionnellement. Le problème peut résider avec votre configuration. –

+0

oui, le problème est avec ma configuration. maintenant ça marche bien. Merci. –

Répondre

0

Votre programme fonctionne correctement, au moins la socket serveur. Vous décidez simplement de ne rien faire avec les données que vous recevez. Cela résoudrait votre problème et vous recevriez le message.

while True: 
    data, addr = serverSock.recvfrom(1024) 
    print "Message: ", data 

Maintenant vous recevez juste dans votre boucle while mais la boucle ne se casse jamais.

+0

merci pour votre aide. –