私は、非侵襲的なTCPサーバーとソケットを使用してネットワークをシミュレートしようとしています。私はexample from documentationを私の仕事の出発点として使用しました。ここに私のサーバークラスのコードは次のとおりです。Python非同期TCPサーバー:そこからソケットを取得できません
import asyncio
import socket
import Node
class ServerProtocol(asyncio.Protocol):
def __init__(self, hostNode):
self.hostNode = hostNode
def connection_made(self, transport):
peername = transport.get_extra_info('peername')
print('Connection from {}'.format(peername))
self.transport = transport
def data_received(self, data):
print('Data received: {!r}'.format(data))
self.hostNode.processIncomingMessage(data)
class NodeServer:
def __init__(self, hostNode):
self.loop = asyncio.get_event_loop()
self.hostNode = hostNode
def startListening(self):
self.coro = self.loop.create_server(ServerProtocol(self.hostNode), '', 0, family=socket.AF_INET)
server = self.loop.run_until_complete(self.coro)
def getPortNumber(self):
print(self.coro.sockets)
portNumber = self.coro.sockets[0].getpeername()[1]
print(portNumber)
return portNumber
Iは、IPv4バージョンを確立する必要があるとOSを聞くために、適切なランダムなポートを与えなければならないので、私はのparams ''
、0
とfamily=socket.AF_INET
でcreate_server
関数を呼び出します。下のコードでは、私はいくつかのポートを取得しようとしています。 Documentation says、create_server
関数はServer
オブジェクト、sockets can be retrievedはsockets
属性から戻します。 しかし、私は、コードを実行したときに、私は次のエラーを取得:だからself.coro.sockets
を実行するときに
AttributeError: 'generator' object has no attribute 'sockets'
をそれが起こる、それが問題です。
誰か助けてくれますか?
多くのありがとうございます。
ありがとうございました。それは本当にひどかった。別の質問をすることはできますか? –