问题
如何创建可在Web上运行的套接字服务器?
只是正确的端口转发问题,还是我必须购买域名?
如果我需要域名,有没有免费的方法可以做到这一点?
背景
我目前正在使用Windows 7(32位)上的Python 2.7.3开发一个基本的IM项目。
我想使用Python从控制台向我朋友的一台电脑发送消息。 This非常宝贵,但它只能在一台机器上运行。
在我尝试通过互联网发送消息时,我尝试过使用多种策略。
由于我最终会将我的Mac用作服务器,因此我使用Port Map来移植不同的端口。当我这样做时,Python通过给我这个错误消息做出响应:
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()
答案 0 :(得分:1)
您的示例代码应该能够在Internet上运行。从编程的角度来看,在LAN或Internet上工作的东西没有太大的区别。
但是,如果要通过Internet连接到套接字,则必须将侦听套接字绑定到可路由的公共IP地址。
如果您朋友的计算机只是另一台局域网上的PC,则很可能是因为它没有公共IP地址,因此您无法连接。
一种解决方案可以是制作与此chat example类似的内容,并在Internet服务器上运行server.py
(具有公共IP地址)。您和您的朋友都会运行client.py
。