我开始用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()
答案 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地址。