簡體   English   中英

將UdpClient與IPv4和IPv6一起使用?

[英]Use UdpClient with IPv4 and IPv6?

不久前,我創建了一個類來處理我的LAN網絡程序。 我最近將一台筆記本電腦升級到Windows 7,並認為Windows 7(或至少是我的設置方式)僅支持IPv6,但我的台式機仍處於Windows xp時代,僅使用IPv4。 我創建的類使用UdpClient類,並且當前已設置為僅與IPv4一起使用。是否可以修改我的代碼以允許發送和接收IPv6和IPv4數據包? 很難刪除類代碼,我的很多程序都依賴於該類。 我想使該類盡可能接近其原始狀態,因此我不需要修改舊程序,只需將舊類切換為更新的類即可。

感謝您提供的所有幫助,Max

發送:

    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#服務器

通過提供DualMode套接字,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 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM