TelenkovDmitry 1 bulan lalu
induk
melakukan
33528686b1
1 mengubah file dengan 24 tambahan dan 15 penghapusan
  1. 24 15
      python_net/asyncio/first_app/server.py

+ 24 - 15
python_net/asyncio/first_app/server.py

@@ -4,11 +4,19 @@ from typing import List, Tuple
 import socket
 import socket
 import asyncio
 import asyncio
 from asyncio import AbstractEventLoop
 from asyncio import AbstractEventLoop
+import logging
 
 
 
 
 async def echo(connection: socket, loop: AbstractEventLoop) -> None:
 async def echo(connection: socket, loop: AbstractEventLoop) -> None:
-    while data := await loop.sock_recv(connection, 1024):
-        await loop.sock_sendall(connection, data)
+    try:
+        while data := await loop.sock_recv(connection, 1024):
+            if data == b'q':
+                raise Exception('Неожиданая ошибка сети')
+            await loop.sock_sendall(connection, data)
+    except Exception as ex:
+        logging.exception(ex)
+    finally:
+        connection.close()
 
 
 
 
 async def listen_for_connections(server_socket: socket, loop: AbstractEventLoop):
 async def listen_for_connections(server_socket: socket, loop: AbstractEventLoop):
@@ -19,6 +27,19 @@ async def listen_for_connections(server_socket: socket, loop: AbstractEventLoop)
         asyncio.create_task(echo(connection, loop))
         asyncio.create_task(echo(connection, loop))
 
 
 
 
+async def main():
+    server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+    server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
+    
+    server_address = ('127.0.0.1', 8000)
+    server_socket.setblocking(False)
+    server_socket.bind(server_address)
+    server_socket.listen()
+    
+    await listen_for_connections(server_socket, asyncio.get_event_loop())
+    # asyncio.run(main())
+
+
 def foo():
 def foo():
 
 
     selector = selectors.DefaultSelector()
     selector = selectors.DefaultSelector()
@@ -52,18 +73,6 @@ def foo():
                 print(f"Получены данные: {data}")
                 print(f"Получены данные: {data}")
                 event_socket.send(data)
                 event_socket.send(data)
 
 
-async def main():
-    server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
-    server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
-    
-    server_address = ('127.0.0.1', 8000)
-    server_socket.setblocking(False)
-    server_socket.bind(server_address)
-    server_socket.listen()
-    
-    await listen_for_connections(server_socket, asyncio.get_event_loop())
-    asyncio.run(main())
-
 
 
 if __name__ == '__main__':
 if __name__ == '__main__':
-    main()
+    asyncio.run(main())