[英]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.