質問

少し前、私は私のLANネットワークプログラムに対処するためのクラスを作成しました。私は最近のWindows 7に私のラップトップのいずれかをアップグレードし、Windows 7(または私はそれが設定した少なくとも方法)は、IPv6のみをサポートしていることrelizedが、私のデスクトップはバックWindows XPの時代にまだある、とIPv4のみを使用しています。私が作成したクラスは、..送信し、IPv6とIPv4パケットの送受信を許可するように私のコードを変更する方法はありUdpClientクラスを使用して、現在のIPv4でのみ動作するように設定されています? 私のプログラムの多くは、このクラスに依存して、クラスコードをスクラップするのは難しいだろう。私は、更新1用の古いクラスを切り替えるので、私は私の古いプログラムを変更する必要はありません、元の状態に近いクラスを維持したいと思います。

任意およびすべてのヘルプのおかげで、 マックス

送信:

    using System.Net.Sockets;UdpClient tub = new UdpClient ();
    tub.Connect ( new IPEndPoint ( ToIP, ToPort ) );
    UdpState s = new UdpState ();
    s.client = tub;
    s.endpoint = new IPEndPoint ( ToIP, ToPort );

    tub.BeginSend ( data, data.Length, new AsyncCallback ( SendCallBack ),s);

    private void SendCallBack ( IAsyncResult result )
    {
        UdpClient client = (UdpClient)( (UdpState)( result.AsyncState ) ).client;
        IPEndPoint endpoint = (IPEndPoint)( (UdpState)( result.AsyncState ) ).endpoint;
        client.EndSend ( result );
    }

受信ます:

    UdpClient tub = new UdpClient (ReceivePort);

    UdpState s = new UdpState ();
    s.client = tub;
    s.endpoint = new IPEndPoint ( ReceiveIP, ReceivePort );
    s.callback = cb;
    tub.BeginReceive ( new AsyncCallback ( receivedPacket ), s );

    public void receivedPacket (IAsyncResult result)
    {
        UdpClient client = (UdpClient)( (UdpState)( result.AsyncState ) ).client;
        IPEndPoint endpoint = (IPEndPoint)( (UdpState)( result.AsyncState ) ).endpoint;
        Byte[] receiveBytes = client.EndReceive ( result, ref endpoint );
        Packet ThePacket = new Packet ( receiveBytes );
        client.Close();
        //Do what ever with the 'ThePacket' now
    }
役に立ちましたか?

解決

私は、これはあなたを助けるかもしれないと思う:

を同一ポート上でIPv6とIPv4をサポートしているC#のサーバー

他のヒント

UdpClientは、デュアルモードソケットを提供することによって、IPv4とIPv6の両方で受信するように調製することができる:

socket = new Socket(AddressFamily.InterNetworkV6, SocketType.Dgram, ProtocolType.Udp);
socket.SetSocketOption(SocketOptionLevel.IPv6, SocketOptionName.IPv6Only, false);
socket.Bind(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 1234));
var udpClient = new UdpClient();
udpClient.Client = socket;
... (use udpClient)

の送信が簡単になり、私たちは、指定されたターゲットアドレス(IPv4またはIPv6)でUdpClientを作成することができます。必要に応じてAddressFamilyは、コンストラクタで提供することができます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top