Python socket.error: [Errno 98] Address already in use的原因和解决方法

 更新时间:2014年08月25日 09:37:17   投稿:junjie  
这篇文章主要介绍了Python socket.error: [Errno 98] Address already in use的原因和解决方法,在Python的socket编程中可能会经常遇到这个问题,需要的朋友可以参考下

一、原因浅析

今天在写一个Python与html5 Websocket 实例,么次终止运行重新运行脚本总是提示地址已经存在并且被使用!查询相关文档才知道在socket编程中,当通过客户端向服务器端发送消息,关闭了连接后,这时如果马上再去运行服务器端程序,会提示这个错误:

复制代码 代码如下:

socket.error: [Errno 98] Address already in use

这是因为在TCP/IP终止连接的四次握手中,当最后的ACK回复发出后,有个2MSL的时间等待,MSL指一个片段在网络中最大的存活时间,这个时间一般是30秒,所以基本上过60秒后就可以重新连接!
为什么要等待2MSL?是因为在最后发出ACK回复后,发送方不能确认ACK是否被另一端正常收到,如果另一端没有收到ACK回复的话,将会在1MSL后再次发送FIN片段。所以说发送方等待2MSL时间,也就是刚好它发ACK回复和对方发送FIN片段的时间,如果此时间内都没有再次收到FIN片段的话,发送方就假设对方已经正常接收到了ACK回复,此时它就会正常关闭连接!

二、解决方法

如果python中socket 绑定的地址正在使用,往往会出现错误,

在linux下:

复制代码 代码如下:

            则会显示“ socket.error: [Errno 98] Address already in use”

在windows下:
复制代码 代码如下:

          则会显示 “socket.error: [Errno 10048] 通常每个套接字地址(协议/网络地址/端口)只允许使用一次”

这是因为socket默认不支持地址复用,如果要复用需要显示设定,即在绑定前调用setsockop函数t让套接字允许地址重用:socket.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)

例如:

复制代码 代码如下:

        self.recSocket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) 
        self.recSocket.settimeout(CHECK_TIMEOUT)
        self.recSocket.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1) 
        self.recSocket.bind(('', UDP_PORT)) 

相关文章

  • Python numpy 模块介绍

    Python numpy 模块介绍

    这篇文章主要介绍了Python numpy 模块,在motplotlib的学习过程中,我们使用最多的就是numpy模块。下面我们将使用numpy进行创建数组、切片、索引、广播等功能实操,需要的朋友可以参考一下
    2022-01-01
  • python实现五子棋程序

    python实现五子棋程序

    这篇文章主要为大家详细介绍了python实现五子棋程序,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-04-04
  • python的reverse函数翻转结果为None的问题

    python的reverse函数翻转结果为None的问题

    这篇文章主要介绍了python的reverse函数翻转结果为None的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-05-05
  • Python机器学习入门(二)之Python数据理解

    Python机器学习入门(二)之Python数据理解

    这篇文章主要介绍了Python机器学习入门知识,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-08-08
  • python基于三阶贝塞尔曲线的数据平滑算法

    python基于三阶贝塞尔曲线的数据平滑算法

    这篇文章主要介绍了python基于三阶贝塞尔曲线的数据平滑算法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-12-12
  • python误差棒图errorbar()函数实例解析

    python误差棒图errorbar()函数实例解析

    这篇文章主要介绍了python误差棒图errorbar()函数实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-02-02
  • python实现盲盒抽奖功能(减库存)

    python实现盲盒抽奖功能(减库存)

    本文主要介绍了python实现盲盒抽奖功能,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09
  • python中websockets与主线程传递参数的实现

    python中websockets与主线程传递参数的实现

    本文主要介绍了python中websockets与主线程传递参数的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-02-02
  • pytorch中nn.Flatten()函数详解及示例

    pytorch中nn.Flatten()函数详解及示例

    nn.Flatten是一个类,而torch.flatten()则是一个函数,下面这篇文章主要给大家介绍了关于pytorch中nn.Flatten()函数详解及示例的相关资料,需要的朋友可以参考下
    2023-01-01
  • python如何读取.mtx文件

    python如何读取.mtx文件

    这篇文章主要介绍了python读取.mtx文件的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-04-04

最新评论