1

问题

如何创建一个在网络上工作的套接字服务器?

仅仅是正确的端口转发问题,还是我必须购买一个域?

如果我需要一个域,有没有免费的方法可以做到这一点?

背景

我目前正在使用 Windows 7(32 位)上的 Python 2.7.3 开发一个基本的IM项目。

我想使用 Python 将消息从控制台发送到我朋友的一台计算机。 是非常宝贵的,但它只适用于一台机器。

在尝试通过 Internet 发送消息时,我尝试了几种策略。

  1. 由于我最终将使用我的 Mac 作为服务器,因此我使用了端口映射来转发不同的端口。当我这样做时,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 
    
  2. 我试图简单地将我的 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()
    
4

1 回答 1

1

您的示例代码应该能够在 Internet 上运行。从编程的角度来看,在 LAN 上或在 Internet 上运行的东西没有太大区别。

但是,如果您想通过 Internet 连接到套接字,则侦听套接字必须绑定到可路由的公共 IP 地址。

如果你朋友的电脑只是另一个局域网上的电脑,很可能它没有公网IP地址,因此你无法连接。

一种解决方案是制作类似于此聊天示例的内容并server.py在 Internet 服务器上运行(使用公共 IP 地址)。您和您的朋友都将运行client.py.

于 2013-02-08T05:59:43.940 回答