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)
您不绑定到机器而是绑定到网络接口,因此您希望绑定到将接收传入数据包的接口。例如,127.0.0.1 是内部(循环)接口,无法从同一台机器外部的任何地方访问,因此您希望在预期来自外部的流量时立即绑定到不同的接口。
主机可以有任意数量的网络接口,例如通过使用多个 LAN 适配器、同时使用 LAN 和无线,或者由于虚拟化。您可能只想收听特定的界面,也许是为了限制对无线网络的访问,但没有其他原因,或者您可能有任何原因。
绑定到 0.0.0.0 将使您的进程同时侦听所有可用接口。