1

UdpClientマルチキャストアドレスでデータを送信するために使用しています。

コードは次のようになります。

m_udpclientSender = new UdpClient();
m_remoteEndPoint = new IPEndPoint(m_multicastAddress, m_port);
m_udpclientSender.ExclusiveAddressUse = false;
m_udpclientSender.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
m_udpclientSender.JoinMulticastGroup(m_multicastAddress, 255);
m_udpclientSender.ExclusiveAddressUse = false;
m_udpclientSender.Send(buffer, buffer.Length, m_remoteEndPoint);

正しいポート/IPに送信されますが、ランダムなポートから発行されます(これは予想されます)が、これを特定のポート(送信しているのと同じポート)から送信する必要があります。

私はそれを見ました: UdpPacket の送信元ポートを指定する方法?

しかし、アドレスを排他的に使用する必要はありません。コンストラクターでこれを指定すると、例外が発生しました(これは既にバインドされていると言っています)。

プロトコルでは、応答をマルチキャストしてはならないことが定義されているため、同じポートを配置する必要があります。

4

2 に答える 2

1

すべてを正しく実行しましたが、ポートの他のユーザーが既に排他的なポート アクセスを持っているようです。WinSock では、このポートから送信できません。

于 2013-02-19T12:50:39.333 に答える
0

実際、ドキュメントによると:

このプロパティは、基になるソケットがクライアント ポートにバインドされる前に設定する必要があります。UdpClient.UdpClient(Int32)、UdpClient.UdpClient(Int32, AddressFamily)、UdpClient.UdpClient(IPEndPoint)、または UdpClient.UdpClient(String, Int32) を呼び出すと、コンストラクターの副作用としてクライアント ポートがバインドされます。後で ExclusiveAddressUse プロパティを設定することはできません

そのため、送信元ポートを設定するときに ExclusiveAddressUse を false に設定することはできません。ソケットを直接使用しました

于 2013-02-19T14:08:59.697 に答える