我正在尝试python网络编程基础一书中的一个示例,其中列出了一个简单的UDP客户机/服务器程序。第一个程序的客户机/服务器位于同一台计算机内,而第二个程序的服务器监听任何计算机。这本书没有详细说明如何在两台机器之间建立连接。
我有两台电脑都连接到因特网上。如何配置它们以相互发送和接收数据包。
下面是示例中的源代码:
#!/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,并试图从作为客户端运行的另一台计算机连接到它,但没有得到响应。我在两台计算机上都不支持代理。
假设您的代码文件名为cs.py,服务器接口地址192.168.1.2和服务器外部地址(internet地址)2.2.2.2
在服务器上运行
cs.py服务器192.168.1.2
确保LAN和WAN之间的服务器端路由器具有服务器的NAT
在客户端运行
cs.py客户端2.2.2.2
首先,如果您真的想尝试这样的应用程序并学习,您需要将这两台计算机连接到同一子网上的本地网络上,这样每台计算机都有类似192.168.x.2和192.168.x.2的地址,这样您就可以知道发生了什么。。。
然后,当您在一台计算机上运行上述应用程序时,请运行为“应用程序名称服务器”,在另一台计算机上运行为“应用程序名称客户端”。您将看到两台计算机都已连接并开始在本地网络中通信。
在Internet上,由于有很多安全通道,很难让您的IP/端口正常工作,而且几乎无法得到您想要的。
相关问题 更多 >
编程相关推荐