UDP ソケットがメッセージの送信に使用したポート番号を取得する方法はありますか?
私がやりたいことは、udp データグラムを誰かに送信し、その送信ポートをリッスンすることです。
たとえば、次のコードでは:
QUdpSocket *s = new QUdpSocket(this);
s.writeDataGram(theData,theIp,thePort);
送信ポートが何であれ、ソケット s を自動的にバインドしますか?
もしそうなら、その送信ポートをリッスンできますか?
UDP ソケットがメッセージの送信に使用したポート番号を取得する方法はありますか?
私がやりたいことは、udp データグラムを誰かに送信し、その送信ポートをリッスンすることです。
たとえば、次のコードでは:
QUdpSocket *s = new QUdpSocket(this);
s.writeDataGram(theData,theIp,thePort);
送信ポートが何であれ、ソケット s を自動的にバインドしますか?
もしそうなら、その送信ポートをリッスンできますか?
ソケットをポート、アドレスにバインドし、データを送信する前にBindModeを指定すると安全です。
ソケットがポートとアドレスにバインドされると、指定されたポートに到着するとreadyRead()UDP Datagram
が発行されます。
したがって、信号をキャプチャし、readyRead()
それに応じてデータを処理できます。つまり、ポートをリッスンする必要はありません。ソケットs
をポートthePort
にバインドしないreadyRead()
と、UDP データグラムの到着時にシグナルが送信されません。
のマニュアルページからreadDatagram
:
qint64 QUdpSocket::readDatagram ( char * データ, qint64 maxSize, QHostAddress * アドレス = 0, quint16 * ポート = 0 ) maxSize バイト以下のデータグラムを受信し、data に格納します。 送信者のホスト アドレスとポートは、*address と *port に格納されます。 (ポインタが 0 でない限り)。
データグラムを受信するには、まずソケットを特定の UDP ポートにバインドする必要があります。次に、受信したデータグラムの送信元ポートを取得するには、 のport
引数にゼロ以外のパラメーターを指定しますreadDatagram
。