2017-10-02 5 views
0

私は、組み込みデバイスと通信するために、Pythonでソケットプログラムを実行しています。私はパケットを送って即座に応答を得ることができます。これをWiresharkで確認できます。私のコードではそれを捕まえることはできませんが、私はWiresharkの応答を見ることができます。以下のコードは、送受信を組み合わせたものです。テストを分割すると、アプリケーション自体で承認を受け取ることができます。私は、アプリケーションがそれを見逃している程度に応答が非常に速いと思う。どんな助けも受け入れられます。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

'server'のループは、受信したメッセージを破棄します(つまり、' print'ingしません)。それ以外は機能的に何も問題はありません。問題はあなたの設定にあるかもしれません。 –

+0

はい、問題は私の設定です。今は正常に動作します。ありがとう。 –

答えて

0

あなたのプログラムは、少なくともサーバーソケットで動作します。あなたは受け取ったデータで何もしないことに決めました。

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

が問題を解決し、メッセージが表示されます。今あなたはあなたのwhileループで受信しますが、ループは決して壊れません。

+0

ご協力いただきありがとうございます。 –

関連する問題