Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何通过internet在两台计算机之间建立UDP连接_Python_Networking_Udp - Fatal编程技术网

Python 如何通过internet在两台计算机之间建立UDP连接

Python 如何通过internet在两台计算机之间建立UDP连接,python,networking,udp,Python,Networking,Udp,我正在试用《python网络编程基础》一书中的一个示例,其中列出了一个简单的UDP客户机/服务器程序。第一个程序的客户机/服务器位于同一台机器内,但第二个程序的服务器监听任何机器。这本书没有详细说明如何在两台机器之间建立连接 我有两台电脑,它们都连接到互联网上。如何将它们配置为相互发送和接收数据包 以下是示例中的源代码: #!/urs/bin/env python # UDP client and server for talking over a network import random,

我正在试用《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)
#/urs/bin/env python
#用于通过网络进行对话的UDP客户端和服务器
导入随机、套接字、系统
s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
最大值=65535
端口=1060
如果2.0:
raise RUNTIMERROR('我认为服务器已关闭')
除:
提出一个真正的错误,让用户看到
其他:
打破
打印“服务器说”,报告(数据)

我找到了作为服务器运行的计算机的公共IP,并尝试从另一台作为客户端运行的计算机连接到它,但没有得到响应。我不支持这两台计算机中的代理。

首先,如果您真的想尝试这种应用程序并学习,您需要将这两台计算机连接到同一子网内的本地网络上,以便每台计算机都有类似192.168.x.2和192.168.x.2的地址,这样您就可以知道发生了什么

然后,当您在一台计算机上运行上述应用程序时,将作为“\u应用程序\u名称服务器”运行,并在另一台计算机上作为“\u应用程序\u名称客户端”运行。您将看到两台机器都已连接,并开始在本地网络内通信


在互联网上,由于有很多安全的通道,你很难让你的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

在您和它之间或NAT后面可能有无限的防火墙和过滤器,因此可能需要端口转发;)端口1060是。@EJP作者提到过它。引述:“[所以我]浏览了一下列表,并打赌您,温和的读者,不是在运行SAP BusinessObjects Polestar…”这不是重点。ISP可能会完全拒绝传递UDP,或者他们可能会拒绝在已知端口上传递UDP,除非您正在运行与该已知端口配套的服务。