少し前に、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
}