0

Python でチャット アプリのコードを見つけましたが、作成者やサイト上の誰かについて助けてくれる情報が見つかりません..

これはコード全体へのリンクです: http://files.myopera.com/manojsheokand666/blog/chat.py

私は何かが欠けていると感じています..私はこれが必要です、私はそれを修正して何かをもっと学びたいと思っています

私はいくつかの読書をしましたが、これはこの投稿を編集するのが3回目です..今、エラーが発生することなく接続を維持できますが、何かを送信(入力)しようとすると、送信も受信もされません. しかし、別の「人」として 2 番目のアプリを実行しようとすると、最初に実行中のアプリで「人」が接続したというメッセージが表示され、最初のアプリが次のエラーでクラッシュします。

KeyError: ('127.0.0.1',62833) - ポートは常に異なることに注意してください

一方、2 番目のアプリは残りますが、アプリを再度実行すると、何も受信しないか、クラッシュします。

私がしたこと:

host = gethostbyname(gethostname()) #this actually gets 192.168.0.101 (my local IP to the router)
s.setsockopt(SOL_IP,IP_ADD_MEMBERSHIP,\
            inet_aton(addr)+inet_aton(host)) #i write 225.0.0.1 as 'addr'

これを機能させる他の方法はありますか?telnet を使用して単純なサーバー/チャットを実行できますが、この GUI (tkinter) は複雑だと思います。これがどのように機能するかを学びたいと思います..ありがとう!

4

1 に答える 1

0

IP_ADD_MEMBERSHIP オプションの定義から、最初のアドレスはマルチキャスト グループ アドレスで、2 番目のアドレスはインターフェイス アドレスです。

最初のアドレスとして 127.0.0.1 を使用しています。これはマルチキャスト アドレスではありません。

マルチキャスト アドレスの範囲は 224.0.0.0/4 (つまり、224.0.0.1 から 239.255.255.254 で、ネットワーク アドレスとブロードキャスト アドレスは含まれません)。

たとえば、最初の (同じネットワーク セグメント上のすべてのホスト) マルチキャスト アドレスを使用しても問題なく動作します。

>>> s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
>>> s.setsockopt(socket.SOL_IP,socket.IP_ADD_MEMBERSHIP,
                 socket.inet_aton('224.0.0.1')+socket.inet_aton('0.0.0.0'))

マルチキャスト アドレスの詳細については、このリファレンスを確認してください。

したがって、アプリケーション用に 224/4 で割り当てられていないマルチキャスト アドレスを選択し、それを使用する必要があります (たとえば、244.0.2.0 のようなアドホック範囲のもの)。マルチキャスト アドレスはインターフェイス アドレスとは関係がないことに注意してください (「0.0.0.0」を使用すると、すべてのローカル インターフェイスがマルチキャスト アドレスに関連付けられます。つまり、すべてのインターフェイスを使用して、そのグループのマルチキャスト パケットを送受信できます)。

于 2013-02-22T23:19:24.547 に答える