如何使用套接字通过网络传输数据?
如何创建一个在网络上工作的套接字服务器?
这仅仅是一个正确的端口转发问题,还是我必须购买域名?
如果我需要一个域,是否有任何*的方式来做到这一点?
背景
我目前工作在Windows 7(32位)使用Python 2.7.3基本IM项目。
我想用控制台将消息从控制台发送到我朋友的电脑之一。 This非常宝贵,但它只能在一台机器内运行。
在我试图通过互联网发送消息时,我尝试过使用几种策略。
-
因为我最终会用我的Mac作为服务器,我已经使用Port Map到端口转发不同的端口。当我做到这一点,巨蟒给予我这个错误提示信息:
Enter the PORT number (1 - 10,000)4235 Socket Created Bind failed. Error Code : 49 Message Can't assign requested address Traceback (most recent call last): File "/Users/BigKids/Desktop/Server v3.py", line 18, in <module> sys.exit() SystemExit
-
我试图简单地把我的IP地址作为端口,但它显示错误信息:
Please enter the host's IP >>> 68.***.***.128 Enter the PORT number (1 - 10,000)2432 Socket Created Bind failed. Error Code : 10049 Message The requested address is not valid in its context Traceback (most recent call last): File "D:\Python Programs\Sockets\First Project\Server v3.py", line 19, in <module> sys.exit() SystemExit
这是必要的代码:
HOST = raw_input("Please enter the host's IP >>> ") PORT = input ("Enter the PORT number (1 - 10,000)") s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) print "Socket Created" try: s.bind((HOST, PORT)) except socket.error, msg: print "Bind failed. Error Code : " + str(msg[0]) + " Message " + str(msg[1]) sys.exit()
你的示例代码应该能够在互联网上工作。从编程的角度来看,在局域网或互联网上工作的东西没有太大的区别。
但是,如果要通过Internet连接到套接字,则侦听套接字必须绑定到可路由的公共IP地址。
如果您的朋友的电脑只是另一个局域网中的电脑,很可能它没有公共IP地址,因此您无法连接。
一种解决方案可以是制作类似于此的chat example并在Internet服务器上运行server.py
(具有公共IP地址)。你和你的朋友都会运行client.py
。
下面的代码是什么? – Emil
对不起,我的意思是在xxmbabanexx示例中给出的代码:http://www.devshed.com/c/a/Python/Sockets-in-Python/2/ – luc
@luc所以......我必须购买域还是有更便宜的方法来做同样的事情? – xxmbabanexx
您的局域网是互联网的一个子集。同样的原则适用 - 你需要一个IP连接到端口来监听/发送数据。 – Makoto