如何使用套接字通过Web传输数据?

时间:2013-02-08 05:18:08

标签: python sockets web python-2.7

问题

如何创建可在Web上运行的套接字服务器?

只是正确的端口转发问题,还是我必须购买域名?

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

背景

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

我想使用Python从控制台向我朋友的一台电脑发送消息。 This非常宝贵,但它只能在一台机器上运行。

在我尝试通过互联网发送消息时,我尝试过使用多种策略。

  1. 由于我最终会将我的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 
    
  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()
    

1 个答案:

答案 0 :(得分:1)

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

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

如果您朋友的计算机只是另一台局域网上的PC,则很可能是因为它没有公共IP地址,因此您无法连接。

一种解决方案可以是制作与此chat example类似的内容,并在Internet服务器上运行server.py(具有公共IP地址)。您和您的朋友都会运行client.py