【问题标题】:Receiving "error: Errno 98 Address already in use" message from socket从套接字接收“错误:Errno 98 地址已在使用”消息
【发布时间】:2020-05-09 10:23:54
【问题描述】:

我正在尝试发送消息以通过 python 中的套接字进行切换。交换机和主机是通过 mininet 使用如下命令创建的。

sudo mn --switch ovsk --topo tree,depth=2,fanout=8 --controller=remote,ip=127.0.0.1,port=6633

在客户端,我使用如下套接字。

import socket
host = socket.gethostbyname("")
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((host, 6633))

message = np.random.choice(normalized_x[0], 1, replace=False)

s.send(message.encode())
s.close()

在服务器端,代码如下。

host = socket.gethostbyname("")
      s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
      s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
      s.bind((host, 6633))          # Define ip address as local host and port number
      s.listen(1)                       # Listen for incoming connection
      clt, addr = s.accept()


      c_messg = clt.recv(10240)                # Store message received from the server

      temp_msg = c_messg.decode()
      s.close()

但是,每当我执行这些 python 文件时,我都会收到一条错误消息,即

error: [Errno 98] Address already in use

我不确定如何解决此问题。提前感谢您的回答。

【问题讨论】:

  • 客户端和服务器是否都在同一台机器上运行?如果是,则需要使用 SO_REUSEADDR
  • 这能回答你的问题吗? Python [Errno 98] Address already in use
  • 我已经尝试过 SO_REUSEADDR。它不能修复错误...

标签: python sockets


【解决方案1】:

该错误意味着您的服务器尝试侦听的地址已被另一个进程使用。 你可以使用

sudo lsof -i :6633

查看哪个进程正在侦听同一端口

或者如果可行,您可以切换到另一个未使用的端口。

如果 netstat 或 lsof 没有显示任何内容

您可能还想看看Link 和Link

【讨论】:

  • 就我而言, sudo lsof -i :6633 没有给我任何进程正在运行。但是当我运行文件并启动套接字时, sudo lsof -i :6633 开始有无法杀死的进程,因为我必须使用套接字运行它。
猜你喜欢
  • 2018-01-30
  • 1970-01-01
  • 2015-06-04
  • 1970-01-01
  • 2011-05-26
  • 1970-01-01
相关资源
最近更新 更多