19

これら2つのプログラムを使用して、2台のコンピューター間で通信しています。1台はsshされており、どちらの側でも何も返しません。何も送信せずに実行されます

クライアント

import sys
from socket import socket, AF_INET, SOCK_DGRAM

SERVER_IP   = '127.0.0.1'
PORT_NUMBER = 5000
SIZE = 1024
print ("Test client sending packets to IP {0}, via port {1}\n".format(SERVER_IP, PORT_NUMBER))

mySocket = socket( AF_INET, SOCK_DGRAM )

while True:
        mySocket.sendto('cool',(SERVER_IP,PORT_NUMBER))
sys.exit()

サーバ

from socket import socket, gethostbyname, AF_INET, SOCK_DGRAM
import sys
PORT_NUMBER = 5000
SIZE = 1024

hostName = gethostbyname( '0.0.0.0' )

mySocket = socket( AF_INET, SOCK_DGRAM )
mySocket.bind( (hostName, PORT_NUMBER) )

print ("Test server listening on port {0}\n".format(PORT_NUMBER))

while True:
        (data,addr) = mySocket.recvfrom(SIZE)
        print data
sys.ext()

私は何が間違っているのでしょうか?

4

5 に答える 5

19

問題はクライアントのアドレスにあります:

SERVER_IP   = '127.0.0.1'

サーバーが別のIPにあるときに、ローカルマシンに接続してデータを送信しています。サーバーの IP またはホスト名のいずれかに接続する必要があります。

これは、クライアントを最初に接続することで確認できます (接続できない場合は失敗します)。

...

import time

mySocket = socket( AF_INET, SOCK_DGRAM )
mySocket.connect((SERVER_IP,PORT_NUMBER))

while True:
        mySocket.send('cool')
        time.sleep(.5)

コメントから更新

Wi-Fi 接続を使用しているため、これらのマシンは両方ともローカル ネットワーク上にあることを意味します。サーバーをターゲットとして指定するには、サーバーの LAN IP アドレスを見つける必要があります。

IP を見つけるためのコマンドライン アプローチ

  • OSX/Linux:ifconfig
  • ウィンドウズ:ipconfig /all
于 2012-07-05T21:49:12.987 に答える
0

SERVER_IP を実サーバーのアドレスに変更してもこれが機能しない場合は、サーバーのファイアウォールがポート 5000 で UDP のトラフィックを受け入れるかどうかを確認してください。

サーバーが Linux マシンの場合、iptables -L でファイアウォール ルールが表示されます。iptables -F はすべての (!) ファイアウォール ルールを削除するため、それが役立つかどうかをテストできます。これは永続的な再起動ではありません。

于 2012-07-05T21:52:10.843 に答える
0

通常の WiFi ルーターのデフォルトのローカル アドレスである 192.168.1.102 のような LAN IP アドレスが表示されます。たとえば、ipconfig を使用すると、Windows コマンド プロンプトに次のように表示されます。

C:\Users\jackc>ipconfig

Windows IP Configuration

Wireless LAN adapter Wireless Network Connection 3:

   Media State . . . . . . . . . . . : Media disconnected
   Connection-specific DNS Suffix  . :

Wireless LAN adapter Wireless Network Connection:

   Connection-specific DNS Suffix  . :
   Link-local IPv6 Address . . . . . : fe80::ed97:91a4:9449:204b%13
   IPv4 Address. . . . . . . . . . . : 192.168.8.106
   Subnet Mask . . . . . . . . . . . : 255.255.255.0
   Default Gateway . . . . . . . . . : 192.168.8.1

私のために働く次のテストコードを試しました。

クライアント:

#!/usr/bin/env python3

import sys
from socket import socket, AF_INET, SOCK_DGRAM

SERVER_IP   = '192.168.8.102'
PORT_NUMBER = 5000
SIZE = 1024
print ("Test client sending packets to IP {0}, via port {1}\n".format(SERVER_IP, PORT_NUMBER))

mySocket = socket( AF_INET, SOCK_DGRAM )
myMessage = "Hello!"
myMessage1 = ""
i = 0
while i < 10:
    mySocket.sendto(myMessage.encode('utf-8'),(SERVER_IP,PORT_NUMBER))
    i = i + 1

mySocket.sendto(myMessage1.encode('utf-8'),(SERVER_IP,PORT_NUMBER))

sys.exit()

サーバ:

#!/usr/bin/env python3

from socket import socket, gethostbyname, AF_INET, SOCK_DGRAM
import sys
PORT_NUMBER = 5000
SIZE = 1024

hostName = gethostbyname( '0.0.0.0' )

mySocket = socket( AF_INET, SOCK_DGRAM )
mySocket.bind( (hostName, PORT_NUMBER) )

print ("Test server listening on port {0}\n".format(PORT_NUMBER))

while True:
    (data,addr) = mySocket.recvfrom(SIZE)
    print data
sys.exit()
于 2016-12-08T22:32:59.060 に答える