新しいasyncio
モジュールをPython 3.5.1から試してみました。私はこれがself.transport.sendto(self.message.encode())
とself.transport.close()
のシーケンスによって引き起こされると考えAsyncio:非常に単純な書き込みと切断のUDPクライアントでの問題
Traceback (most recent call last):
File "C:\Users\oxygen\Documents\GitProjects\tests\python\udp\client.py", line
35, in <module>
loop.run_forever()
File "C:\Python35-32\lib\asyncio\base_events.py", line 295, in run_forever
self._run_once()
File "C:\Python35-32\lib\asyncio\base_events.py", line 1218, in _run_once
event_list = self._selector.select(timeout)
File "C:\Python35-32\lib\selectors.py", line 314, in select
r, w, _ = self._select(self._readers, self._writers, [], timeout)
File "C:\Python35-32\lib\selectors.py", line 305, in _select
r, w, x = select.select(r, w, w, timeout)
OSError: [WinError 10038] an operation was attempted on something that is not a socket
:私はこれを実行すると
import asyncio
class EchoClientProtocol:
def __init__(self, message, loop):
self.message = message
self.loop = loop
self.transport = None
def connection_made(self, transport):
self.transport = transport
print('Send:', self.message)
self.transport.sendto(self.message.encode())
self.transport.close()
def datagram_received(self, data, addr):
print("Received:", data.decode())
print("Close the socket")
#self.transport.close()
def error_received(self, exc):
print('Error received:', exc)
def connection_lost(self, exc):
print("Socket closed, stop the event loop")
loop = asyncio.get_event_loop()
loop.stop()
loop = asyncio.get_event_loop()
message = "Hello World!"
connect = loop.create_datagram_endpoint(
lambda: EchoClientProtocol(message, loop),
remote_addr=('127.0.0.1', 9999))
transport, protocol = loop.run_until_complete(connect)
loop.run_forever()
transport.close()
loop.close()
、通訳は私に与える:ここに私のテストコードです。私が正しく理解すれば、sendto
メソッドは非同期で、close
メソッドを呼び出すことでソケットを閉じた後に実際に呼び出されます。これを解決する方法はありますか?
ご意見ありがとうございます。私のコードは実際にあなたがリンクした例の編集版です。 読書をしないで接続を開く方法について、もう少し助けてください。私は本当に接続を確立し、データを送信して閉じたいと思っています。私はドキュメントで助けを探していましたが、[この方法](https://docs.python.org/3/library/asyncio-stream.html#asyncio.open_connection)が見つかりました。 –
UDPはコネクションレスプロトコル(https://en.wikipedia.org/wiki/User_Datagram_Protocol)です。 – kwarunek