不久之前我创建了一个类来处理我的局域网组网方案。我最近升级我的笔记本电脑之一到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
    }
有帮助吗?

解决方案

我觉得这可能会帮助您:支持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