【发布时间】:2020-06-01 12:13:02
【问题描述】:
运行python3.8.0的主机
第二台机器python 3.7.5
我在我的主机上创建了一个服务器套接字:
import socket
HOST = ''
PORT = 65432
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.bind((HOST, PORT))
s.listen()
conn, addr = s.accept()
with conn:
print('Connected by', addr)
while True:
data = conn.recv(1024)
if not data:
break
conn.sendall(data)
我还在第二台机器上创建了一个客户端套接字:
import socket
HOST = '' # The server's hostname or IP address
PORT = 65432 # The port used by the server
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.connect((HOST, PORT))
s.sendall(b'Hello, world')
data = s.recv(1024)
print('Received', repr(data))
我的理解是,如果我运行server 套接字,然后通过运行client 套接字进行连接,我的服务器套接字应该打印:
"connected by [client ip], [specified port]"
同时客户端应该打印:"Received b'Hello, world'。
我的服务器打印"connected by [server ip], [random port]",客户端打印"Received b'Hello, world'"。
我的问题是:
为什么服务器打印的是服务器 ip 而不是客户端 ip?如果我指定了端口,为什么端口是随机的?
如果我的服务器套接字正在运行,如何将数据从连接的客户端套接字发送到服务器套接字?
例如:x = 'random string'。客户端套接字连接后,如何发送'x' 以便在服务器端接收?
【问题讨论】: