4

私はネットワーキングを始めたばかりで、マルチキャスト用の非常に単純なコードを書いています。さまざまなインターフェイスについてはまだわかりません。「0.0.0.0」を使用した例もあれば、「127.0.0.1」を使用した例もあります。

サーバーのコード

import socket
import sys
import time

ANY = socket.gethostbyname('localhost')
S_PORT = 1501
M_ADDR = "224.168.2.9"
M_PORT = 1600

sock = socket.socket(socket.AF_INET,socket.SOCK_DGRAM,socket.IPPROTO_UDP)
sock.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEPORT,1)
sock.bind((ANY,S_PORT))
sock.setsockopt(socket.IPPROTO_IP,socket.IP_MULTICAST_TTL,255)

while 1:
    message = raw_input("Enter message: ")
    sock.sendto(message,(M_ADDR,M_PORT))
    if message == "exit":
        break
sock.close()

クライアントのコード

import socket
import time
import sys

ANY = socket.gethostbyname('localhost')
M_ADDR = "224.168.2.9"
M_PORT = 1600
sock = socket.socket(socket.AF_INET,socket.SOCK_DGRAM,socket.IPPROTO_UDP)
sock.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEPORT,1)
sock.bind((ANY,M_PORT))
sock.setsockopt(socket.IPPROTO_IP,socket.IP_MULTICAST_TTL,255)
status = sock.setsockopt(socket.IPPROTO_IP,socket.IP_ADD_MEMBERSHIP,socket.inet_aton(M_ADDR) + socket.inet_aton(ANY))

while 1:
    data,addr = sock.recvfrom(1024)
    print "Received message from " + str(addr) + " : " + data
    if data == "exit":
        break
sock.close()

クライアント コードは正常に実行され、ソケットでメッセージの受信を待機しています。しかし、メッセージを入力するとすぐに Code Server がクラッシュします。

Traceback (most recent call last):
  File "multicast_server.py", line 17, in <module>
    sock.sendto(message,(M_ADDR,M_PORT))
socket.error: [Errno 49] Can't assign requested address

この問題の原因は何ですか? を使用すると、上記のコードが機能しますANY = "0.0.0.0"。何故ですか ?何が変わる?

4

3 に答える 3

1

Python でネットワークを使用する場合は"0.0.0.0"""任意の IP インバウンドに対して開放されます。あなたの場合、私は"0.0.0.0"orを使用します"127.0.0.1"(世界に門戸を開くのが苦手な場合)。

于 2013-11-05T20:36:50.870 に答える
-5

デバイスの IP アドレスを取得します ubuntu: ifcongfig

任意のイーサネット、ループ、wlan から IP アドレスを選択し、M_ADDR をその IP アドレスに置き換えます

于 2016-06-16T14:00:24.713 に答える