0

I can not solve the problem with the error after connecting the client to the server. Here is the server code for Python 3.7.7:

#!/usr/bin/env python3

# WS server example

import asyncio
import websockets

#======================================================================
#Register
#======================================================================
async def Register(websocket):
    remote_ip = websocket.remote_address[0] #Get client IP
    print ("IP: " + remote_ip)
    message="Hi. Your IP: " +remote_ip
    await websocket.send(message) #Say client IP
    print("==> " + str(message))

#======================================================================
#Handler
#======================================================================    
async def Handler(websocket, path):
    print("Client connect!")
    await Register(websocket)

    #try:
    async for message in websocket:
        print("<== " + str(message))

        await websocket.send(message)
        print("==> " + str(message))

    #except Exception as E:
        #print(str(E))
    #finally:
        #await asyncio.sleep(2)

#======================================================================
#MAIN
#======================================================================
print("Starting!")
start_server = websockets.serve(Handler, "0.0.0.0", 8012)
asyncio.get_event_loop().run_until_complete(start_server)
asyncio.get_event_loop().run_forever()

After connecting, after 40 seconds from the moment of connection, an error is returned, and it does not matter if the client exchanged data with the server or not.

Error in connection handler
Traceback (most recent call last):
  File "/usr/local/lib/python3.7/site-packages/websockets/protocol.py", line 827, in transfer_data
    message = await self.read_message()
  File "/usr/local/lib/python3.7/site-packages/websockets/protocol.py", line 895, in read_message
    frame = await self.read_data_frame(max_size=self.max_size)
  File "/usr/local/lib/python3.7/site-packages/websockets/protocol.py", line 971, in read_data_frame
    frame = await self.read_frame(max_size)
  File "/usr/local/lib/python3.7/site-packages/websockets/protocol.py", line 1051, in read_frame
    extensions=self.extensions,
  File "/usr/local/lib/python3.7/site-packages/websockets/framing.py", line 105, in read
    data = await reader(2)
  File "/usr/local/lib/python3.7/asyncio/streams.py", line 679, in readexactly
    await self._wait_for_data('readexactly')
  File "/usr/local/lib/python3.7/asyncio/streams.py", line 473, in _wait_for_data
    await self._waiter
concurrent.futures._base.CancelledError

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/usr/local/lib/python3.7/site-packages/websockets/server.py", line 191, in handler
    await self.ws_handler(self, path)
  File "StartWB3.py", line 26, in Handler
    async for message in websocket:
  File "/usr/local/lib/python3.7/site-packages/websockets/protocol.py", line 439, in __aiter__
    yield await self.recv()
  File "/usr/local/lib/python3.7/site-packages/websockets/protocol.py", line 509, in recv
    await self.ensure_open()
  File "/usr/local/lib/python3.7/site-packages/websockets/protocol.py", line 812, in ensure_open
    raise self.connection_closed_exc()
websockets.exceptions.ConnectionClosedError: code = 1006 (connection closed abnormally [internal]), no reason

What could be the problem? Thanks in advance for the answers.

ELForcer
  • 1
  • 1
  • 2

2 Answers2

1

The reason is that the underlying socket has been closed and websockets is trying to cancel the task running Handler(). You can catch the error using a try/except block.

Labo
  • 2,482
  • 2
  • 18
  • 38
0

Empirically, it turned out that the problem is not in the WebSocket package for Python, but in C # WebSocket4Net: Why is WebSocket4Net closing the connection with 1011 error code

Started using the WebSocketSharp library and the problem disappeared.

ELForcer
  • 1
  • 1
  • 2