2

ネットワーク構成の場合なのか、ソフトウェアに問題があるのか​​ わかりません。

アドレスが のデバイスがあります192.168.4.83。このデバイスは、アドレスを持つ私のPC Linuxサーバーに直接接続されています192.168.4.11

Python を使用して、サーバーからデバイスに UDP パケットを送信したいと考えています。サーバーも応答をリッスンしています。それを行うための簡単なpythonスクリプトがあります。私は以下を使用して送信します:

    self.sendSocket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    self.sendSocket.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST,1)
    sock.sendSocket.send(msg,('<boradcast>', UDP_PORT))

リッスンして 0.0.0.0 にバインドします。コードは非常に単純です。1 つのスレッドは udp パケットを送信し、もう 1 つのスレッドはパケットを受信するだけの while(1) ループを持っています。

これはリスニング コードです。

class CUdp(threading.Thread):
    def __init__(self, log=False):
        threading.Thread.__init__(self)
        self.running = True
        self.listenSocket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        self.listenSocket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
        self.listenSocket.bind(("", UDP_PORT))
        self.last_time = 0
        self.now = 0
        self.log = log
    def run(self):
        global sent_time
        while(self.running):
            data, addr = self.listenSocket.recvfrom(1024) 
            if data != None:
               recv_time = time.time()
               myprint("[RECV " +  str(datetime.datetime.now()) + "] (len=" + str(len(data)) +") : " +  str(data)+"\n", self.log)

奇妙なことに、wireshark では、パケットが から に送信され192.168.4.11255.255.255.255デバイスがこのパケットに応答しました - からのパケット192.168.4.83が に送信されました255.255.255.255。bind (0.0.0.0, port) を使用してもカバーされないよう255.255.255.255です。私は迷っていて、アイデアがありません。

ifconfig は次のとおりです。

eth0      Link encap:Ethernet  HWaddr 2C:41:38:9B:BF:CA  
          inet addr:192.168.4.11  Bcast:192.168.4.255  Mask:255.255.255.0
          inet6 addr: fe80::2e41:38ff:fe9b:bfca/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:34 errors:0 dropped:0 overruns:0 frame:0
          TX packets:413 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:5050 (4.9 KiB)  TX bytes:26688 (26.0 KiB)
          Interrupt:17  

手がかりはありますか?

4

1 に答える 1

0

すべてのコードが適切に記述されていると仮定すると、これは Linux ファイアウォールの問題である可能性があります。IP アドレスを iptables に追加するか、安全なネットワーク環境にある場合はファイアウォールを停止することができます。

/etc/init.d/iptables stop

于 2014-01-15T16:18:17.410 に答える