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

Mar*_*Aja 1 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()
Run Code Online (Sandbox Code Playgroud)

** 客户 **

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()
Run Code Online (Sandbox Code Playgroud)

Tho*_*tze 5

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

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

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