単純なUDPクライアント/サーバープログラムをリストしている本「Pythonネットワークプログラミングの基礎」の例を試しています。最初のプログラムでは同じマシン内にクライアント/サーバーがありましたが、2 番目のプログラムではサーバーが任意のマシンをリッスンしていました。この本には、2 台のマシン間の接続を確立する方法については詳しく説明されていません。
2 台のコンピューターがあり、どちらもインターネットに接続されています。互いにパケットを送受信するように構成するにはどうすればよいですか。
この例のソース コードは次のとおりです。
#!/urs/bin/env python
# UDP client and server for talking over a network
import random, socket, sys
s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
MAX = 65535
PORT = 1060
if 2<= len(sys.argv) <= 3 and sys.argv[1] == 'server':
interface = sys.argv[2] if len(sys.argv)>2 else ''
s.bind((interface,PORT))
print 'Listening at ', s.getsockname()
while True:
data, address = s.recvfrom(MAX)
if random.randint(0,1):
print 'The client at ', address, 'says:', repr(data)
s.sendto('Your data was %d bytes ' % len(data) ,address)
else:
print 'Pretending to drop packet from ', address
elif len(sys.argv)==3 and sys.argv[1] == 'client':
hostname = sys.argv[2]
s.connect((hostname,PORT))
print 'Client socket name is', s.getsockname()
delay = 0.1
while True:
s.send('This is another message')
print 'Waiting up to', delay, 'seconds for a reply'
s.settimeout(delay)
try:
data = s.recv(MAX)
except socket.timeout:
delay *= 2 # wait even longer for the next request
if delay > 2.0:
raise RuntimeError('I think the server is down')
except:
raise # a real error so we let the user see it
else:
break
print 'The server says ', repr(data)
サーバーとして動作しているコンピュータのパブリック IP を見つけて、クライアントとして動作している別のマシンから接続しようとしましたが、応答がありませんでした。私はどちらのコンピューターでもプロキシの背後にいません。