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。