2013-02-08 208 views
1

问题如何使用套接字通过网络传输数据?

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

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

如果我需要一个域,是否有任何自由的方式来做到这一点?

背景

我目前工作在Windows 7(32位)使用Python 2.7.3基本IM项目。

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

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

  1. 因为我最终会用我的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 
    
  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

您的局域网是互联网的一个子集。同样的原则适用 - 你需要一个IP连接到端口来监听/发送数据。 – Makoto

回答

1

你的示例代码应该能够在互联网上工作。从编程的角度来看,在局域网或互联网上工作的东西没有太大的区别。

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

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

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

+2

下面的代码是什么? – Emil

+0

对不起,我的意思是在xxmbabanexx示例中给出的代码:http://www.devshed.com/c/a/Python/Sockets-in-Python/2/ – luc

+0

@luc所以......我必须购买域还是有更便宜的方法来做同样的事情? – xxmbabanexx

相关问题