0

少し前に、LANネットワークプログラムを処理するためのクラスを作成しました。最近、ラップトップの1つをWindows 7にアップグレードし、Windows 7(または少なくともセットアップ方法)がIPv6のみをサポートしていることを確認しましたが、デスクトップはWindows XPの時代に戻っており、IPv4のみを使用しています。私が作成したクラスはUdpClientクラスを使用しており、現在IPv4でのみ機能するように設定されています。IPv6およびIPv4パケットの送受信を許可するようにコードを変更する方法はありますか?クラスコードを廃棄するのは難しいでしょう。私のプログラムの多くはこのクラスに依存しています。クラスを元の状態にできるだけ近づけたいので、古いプログラムを変更する必要はありません。古いクラスを更新されたクラスに切り替えるだけです。

助けてくれてありがとう、マックス

送信:

    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
    }
4

2 に答える 2

0

これが役立つと思います:同じポートでIPv6とIPv4をサポートするC#サーバー

于 2010-03-17T03:20:03.200 に答える