python socket 地址重用的问题

我用python的socket模块先产生一个client_socket,设置SO_REUSEADDR,绑定端口60000,连接其他服务器再产生一个server_socke... 我用python的 socket模块
先产生一个client_socket , 设置SO_REUSEADDR,绑定 端口60000,连接其他服务器
再产生一个server_socket,设置SO_REUSEADDR,绑定端口60000,并且监听端口60000,accept其他客户端的连接
以上没有问题的,client_socket 能连上其他服务器,而其他客户端也能连上server_socket 但是 如果我把 1和2的步骤反过来
产生一个server_socket,设置SO_REUSEADDR,绑定端口60000,并且监听端口60000,accept其他客户端的连接
产生一个client_socket , 设置SO_REUSEADDR,绑定 端口60000,连接其他服务器 这样执行到第2部的时候,就出现 Address already in use
这个问题 自己解决了

所有的主流操作系统都能够支持特殊的TCP套接字参数,通常叫做"SO_REUSEADDR",该参数允许应用程序将多个套接字绑定到本地的一个endpoint(只要所有要绑定的套接字都设置了SO_REUSEADDR参数即可)。BSD系统引入了SO_REUSEPORT参数,该参数用于区分端口重用还是地址重用,在这样的系统里面,上述所有的参数必须都设置才行
我的是mac系统,所以需要
#端口重用
self.__socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
self.__socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT, 1)
这种情况下,就不会出现 address in use了
展开
 我来答
百度网友079a3d640
2015-02-11 · TA获得超过270个赞
知道小有建树答主
回答量:241
采纳率:0%
帮助的人:173万
展开全部
我想你客户端和 服务端的代码写错文件了吧。
另外还要排除一个问题:
确定你在执行第二步骤的时候,第一个步骤占用的端口6000已经释放掉了。

一般服务是要先跑的。由服务端来监听端口,等待客户端连接。
追问
没有写错文件,我的目的是把服务器的监听端口和客户端的本地端口绑定到一个端口上, 如果先绑定客户端的端口,再去绑定服务器的监听端口,这没有问题,如果二者反过来就有问题了
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式