Python中的套接字编程 -- 实际远程端口

3 投票
1 回答
4300 浏览
提问于 2025-04-16 13:51

最近我在用Python做一些网络编程,想确认一下我认为客户端和服务器之间的流程:

  • 服务器在一个指定的端口(9999)上监听连接
  • 客户端通过创建一个新的套接字(比如1111)来连接服务器
  • 服务器接受客户端的请求,并自动生成一个新的套接字(????),这个套接字负责处理客户端和服务器之间的通信

从上面的流程可以看到,一共有3个套接字参与:

  • 监听客户端的服务器套接字
  • 客户端生成的套接字
  • 服务器生成的用来处理客户端的套接字

我知道前两个套接字的端口(9999和1111)是怎么获取的,但不太清楚如何获取服务器端与客户端实际通信的“真实”端口。我现在用的代码片段是:

def sock_request(t):
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect(('localhost', 9999))
    print('local sock name: ' + str(s.getsockname()))
    print('peer sock name: ' + str(s.getpeername()))
    s.send('a' * 1024 * int(t))
    s.close()

如果能帮我找到服务器上与客户端实际通信的“端口”号,我将非常感激。谢谢!

1 个回答

4

新的套接字是在同一个端口上。一个TCP连接是由四个信息来识别的:源IP和端口,以及目标IP和端口。所以,你的服务器在同一个端口上有两个套接字(也就是监听套接字和接受套接字)并不是问题。

撰写回答