socket.error:[Errno 98]地址已在使用中

时间:2018-11-22 04:10:55

标签: python-3.6 odoo-11

我有此代码与服务器连接,这是服务器上的fileServer.py,我在客户端有另一个文件py,但尚未测试,运行此代码时出现问题,请参见以下信息

import socket
import threading
import os

def RetrFile(name, sock):
      filename = sock.recv(1024).decode()
      if os.path.isfile(filename):
          message = "EXISTS" + str(os.path.getsize(filename))
          sock.send(message.encode())
          userResponse = sock.recv(1024).decode()
          if userResponse[:2] == "OK":
              with open(filename, 'rb') as f:
                 bytesToSend = f.read(1024)
                 sock.send(bytesToSend)
                 while (bytesToSend !=""):
                     bytesToSend = f.read(1024)
                     sock.send(bytesToSend)
    else:
       sock.send("ERR")
    sock.close()

def Main():
    host = '192.168.0.91'
    port = 8069

    s = socket.socket()
    s.bind((host,port))

    s.listen(5)

    print('Server Started')

    while True:
       c, addr = s.accept()
       print ('Client connected ip: ' + str(addr))
       t = threading.Thread(target = RetrFile, args=('retrThread',c))
       t.start()
   s.close()

if __name__ == '__main__':
     Main()

当我运行它时,它显示一个错误,我认为这是与IP服务器连接的套接字有关,对吗?

File "fileServer.py", line 40, in <module>
Main()
File "fileServer.py", line 26, in Main
s.bind((host,port))
File "/usr/lib/python2.7/socket.py", line 228, in meth
return getattr(self._sock,name)(*args)
socket.error: [Errno 98] Address already in use

我该如何解决? 有什么建议吗? 预先感谢

5 个答案:

答案 0 :(得分:1)

我认为您正在尝试在同一端口上运行多台Odoo服务器。

在终端上尝试:

 sudo netstat -nlp | grep 8069

然后您将看到类似这样的内容:

 tcp        0      0 0.0.0.0:8069            0.0.0.0:*               LISTEN      10869/python2    

终止过程:

sudo kill -9 10869

OR

更改fileServer.py中的端口号。

然后尝试启动Odoo。

希望它会对您有所帮助。

答案 1 :(得分:1)

您可以简单地使用以下脚本来终止该进程。

fuser -k 8069/tcp 

通常

fuser -k <port_no>/<tcp/udp>

OR

netstat -nlp | grep <port_no>
kill -9 PID

答案 2 :(得分:0)

错误是不言自明的“地址已在使用中” 返回 getattr(self._sock,name)(* args) socket.error:[Errno 98] 地址已在使用中

@KbiR已经对其进行了解释

对于Windows,请查看How can you find out which process is listening on a port on Windows?

答案 3 :(得分:0)

您可以使用此命令杀死该端口上已经在运行的Odoo进程

fuser -k tcp/8069

然后再次启动您的python脚本

答案 4 :(得分:-1)

使用此命令是正确的sudo systemctl stop odoo11

如果您使用其他版本的odoo,请为您的版本更改数字11