Python中的套接字编程 -- 实际远程端口
最近我在用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和端口。所以,你的服务器在同一个端口上有两个套接字(也就是监听套接字和接受套接字)并不是问题。