为什么我要绑定在不同于127.0.0.1的服务器上?

时间:2016-03-14 13:24:24

标签: python sockets networking

我开始用Python学习'网络'。我已经按照基本教程来运行带有TCP连接的客户端/服务器体系结构。 我得到了整个逻辑,但我不明白为什么我会将我的服务器绑定到127.0.0.1以外的其他主机上?我的意思是,我的服务器程序应该在接收请求的服务器上运行。是否存在将服务器套接字绑定到127.0.0.1以外的其他内容有用的情况?

以下是客户端和服务器程序:

**服务器**

import socket

def main():
    host = '127.0.0.1'
    port = 5000
    s = socket.socket()
    s.bind((host, port))
    s.listen(1)
    c, addr = s.accept()
    print('Connection from: ' + str(addr))
    while True:
        data = c.recv(1024).decode('utf-8')
        if not data:
            break
        print('From connected user: ' + data)
        data = data.upper()
        print('Sending ' + data)
        c.send(data.encode('utf-8'))
    c.close()

if __name__ == '__main__':
    main()

**客户**

import socket

def main():
    host = '127.0.0.1'
    port = 5000
    s = socket.socket()
    s.connect((host, port))
    msg = input('> ')
    while msg != 'q':
        s.send(msg.encode('utf-8'))
        data = s.recv(1024).decode('utf-8')
        print('Received from server: ' + data)
        msg = input('> ')
    s.close()

if __name__ == '__main__':
    main()

2 个答案:

答案 0 :(得分:4)

您不能绑定到计算机而是绑定到网络接口,因此您希望绑定到将接收传入数据包的接口。例如,127.0.0.1是内部(循环)接口,无法从同一台机器外的任何位置访问,因此您希望在预期来自外部的流量时立即绑定到不同的接口。

主机可以具有任意数量的网络接口,例如通过使用多个LAN适配器,同时使用LAN和无线,或者由于虚拟化。您可能只想听一个特定的界面,可能是为了限制无线网络的可访问性而不是其他任何原因,或者您可能有的任何原因。

绑定到0.0.0.0将使您的进程同时侦听所有可用接口。

答案 1 :(得分:0)

您可以绑定到192.168.1.5,或者绑定本地IP地址,以便从本地网络访问您的服务器。

您还可以绑定到104.31.82.58或任何公共IP,以便来自世界各地的任何人都可以连接到您的服务器。

我的意思是,你无法真正绑定到104.31.82.58,你应该绑定到你自己的 IP地址。