Python网络编程(绑定到外部地址)

时间:2012-05-22 15:46:45

标签: python networking

我是python的新手,就在几天前我开始尝试网络编程(我也是新手)

现在我找到了一个简洁的客户端服务器程序,它在我的计算机上运行非常简单,但当我更换本地地址并告诉我的朋友运行客户端脚本时,它就不会响应。

我的全球I.P地址:120.59.XX.XXX

ipconfig返回的我的Ipv4地址:192.168.1.2(我通过路由器连接到互联网)

我的网关地址:192.168.1.1

使用的端口:1060(我在本地测试了这个端口并且它没有被使用)

#server.py

import socket
import sys

server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

MAX = 65535
PORT = 1060

server.bind(('192.168.1.2', PORT))
print 'Listening at', server.getsockname()
while True:
    data, address = server.recvfrom(MAX)
    print 'The client at', address, 'says', repr(data)
    server.sendto('Your data was %d bytes' % len(data), address)

客户代码:

#client.py

import socket
import sys

client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

PORT = 1060
MAX = 65536

client.sendto('Hello Server!', ('120.59.XX.XXX', PORT))
data, address = client.recvfrom(MAX)
print 'The server', address, 'says', repr(data)

我在我的计算机上启动了server.py,并告诉我的朋友启动client.py,我允许通过防火墙传入连接到python,我还添加了1060端口到Windows传入连接列表。

仍然没有响应,我无法解释为什么(我有一个动态IP地址,但对于当前会话它保持不变,因此应该工作,1060也是一个众所周知的端口,不应该#t是个问题吧?)

2 个答案:

答案 0 :(得分:1)

您需要在路由器中添加端口转发规则!从端口1060前进到192.168.1.2端口1060.

答案 1 :(得分:1)

路由器上需要端口转发,它会将端口1060上路由器外部(全局)地址的连接转发到桌面IP 192.168.1.2端口1060.