Python server “Only one usage of each socket address is normally permitted”

后端 未结 7 999
野趣味
野趣味 2020-11-30 06:21

I\'m trying to create a very basic server in python that listens in on a port, creates a TCP connection when a client tries to connect, receives data, sends something back,

相关标签:
7条回答
  • 2020-11-30 07:03

    I changed my port number into different one and it works.

    if __name__ == '__main__':
        socketio.run(app, debug = True, use_reloader = False, port=1111)
    
    0 讨论(0)
  • 2020-11-30 07:06

    In the article posted by @JohnKugelman it is stated that even after enabling SO_REUSEADDR you cannot use the socket to connect to the same remote end as before:

    SO_REUSADDR permits you to use a port that is stuck in TIME_WAIT, but you still can not use that port to establish a connection to the last place it connected to.

    I see that you are just testing/playing around. However, to avoid this error you really need to make sure that you terminate the connection properly. You could also mess with the tcp timings of the operating system: http://www.linuxquestions.org/questions/linux-networking-3/decrease-time_wait-558399/

    For testing purposes it would also be fine if you just change your serverPort in a round-robin fashion, what do you think?

    0 讨论(0)
  • 2020-11-30 07:21

    If you are trying to rerun the server without stopping the last instant of the server it won't work. If you want to stop the current instant go to

    shell-->restart shell.

    If you have already closed the shell without stopping the server go to the task manager and end task python process in the background processers. This will stop the last instant of your server.

    0 讨论(0)
  • 2020-11-30 07:22

    It's important (on Windows specifically) to close the socket. Otherwise, you have to wait for it to timeout after closing Python.

    Would:

    try:
        while 1:
            newConnection, client = s.accept()
            msg = newConnection.recv(BUFFER_SIZE)
    
            print msg
    
            newConnection.send("hello world")
            newConnection.close()
    finally:
        s.close()
    

    help?

    0 讨论(0)
  • 2020-11-30 07:23

    Enable the SO_REUSEADDR socket option before calling bind(). This allows the address/port to be reused immediately instead of it being stuck in the TIME_WAIT state for several minutes, waiting for late packets to arrive.

    s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
    
    0 讨论(0)
  • 2020-11-30 07:23

    On Windows, you can try these steps:

    1. check which process uses the port.

    # 4444 is your port number
    netstat -ano|findstr 4444
    

    you will get something like this:

    # 19088 is the PID of the process
    TCP    0.0.0.0:4444           *:*                                    19088
    

    2. kill this process

    With:

    tskill 19088
    

    Or:

    taskkill /F /PID 19088
    

    Good luck.

    0 讨论(0)
提交回复
热议问题