現在我的udp server 如何接收一對多client資料
我的程式如下
private static ManualResetEvent UdpRec=new ManualResetEvent(false);
public void UdpServerConnect()
{
try
{
MyUdpServer = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); IPEndPoint ServerPoint = new IPEndPoint(IPAddress.Any, UdpPort); MyUdpServer.Bind(ServerPoint);
Thread UdpRec = new Thread(new ThreadStart(UdpRecThread));
UdpRec.Start();
}
catch (SocketException ex)
{ MessageBox.Show(ex.ErrorCode+":"+ex.Message);
}
}
private void UdpRecThread( ) 程式接收完client端資料不在這停留等待下一個client 傳送資料
{
UdpRec.Reset();
IPEndPoint ClinetOpen = new IPEndPoint(IPAddress.Any, 0);
EndPoint ClientRemo = (EndPoint)ClinetOpen;
MyUdpServer.BeginReceiveFrom(byteData, 0, byteData.Length, SocketFlags.None, ref ClientRemo, new AsyncCallback(UdpRecCallback), ClientRemo);
UdpRec.WaitOne();收到資料後程式會到那
}
private void UdpRecCallback(IAsyncResult RecData)
{
try
{
UdpSocket DataSave = new UdpSocket();
IPEndPoint ClinetOpen = new IPEndPoint(IPAddress.Any, 0);
EndPoint ClientRemo = (EndPoint)ClinetOpen; DataSave.MyUdpServer_Siz = MyUdpServer.EndReceiveFrom(RecData, ref ClientRemo); DataSave.MyUdpServer_Buffer = byteData; DataSave.ClientIP = ClientRemo.ToString(); if (DataSave.MyUdpServer_Siz > 0 )
{ MessageBox.Show(ToHexString(DataSave.MyUdpServer_Buffer, DataSave.MyUdpServer_Siz) + "\n" + DataSave.ClientIP);
}
}
catch (SocketException ex)
{ MessageBox.Show(ex.ErrorCode + ":" + ex.Message);
}
}
我的程式如下
private static ManualResetEvent UdpRec=new ManualResetEvent(false);
public void UdpServerConnect()
{
try
{
MyUdpServer = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); IPEndPoint ServerPoint = new IPEndPoint(IPAddress.Any, UdpPort); MyUdpServer.Bind(ServerPoint);
Thread UdpRec = new Thread(new ThreadStart(UdpRecThread));
UdpRec.Start();
}
catch (SocketException ex)
{ MessageBox.Show(ex.ErrorCode+":"+ex.Message);
}
}
private void UdpRecThread( ) 程式接收完client端資料不在這停留等待下一個client 傳送資料
{
UdpRec.Reset();
IPEndPoint ClinetOpen = new IPEndPoint(IPAddress.Any, 0);
EndPoint ClientRemo = (EndPoint)ClinetOpen;
MyUdpServer.BeginReceiveFrom(byteData, 0, byteData.Length, SocketFlags.None, ref ClientRemo, new AsyncCallback(UdpRecCallback), ClientRemo);
UdpRec.WaitOne();收到資料後程式會到那
}
private void UdpRecCallback(IAsyncResult RecData)
{
try
{
UdpSocket DataSave = new UdpSocket();
IPEndPoint ClinetOpen = new IPEndPoint(IPAddress.Any, 0);
EndPoint ClientRemo = (EndPoint)ClinetOpen; DataSave.MyUdpServer_Siz = MyUdpServer.EndReceiveFrom(RecData, ref ClientRemo); DataSave.MyUdpServer_Buffer = byteData; DataSave.ClientIP = ClientRemo.ToString(); if (DataSave.MyUdpServer_Siz > 0 )
{ MessageBox.Show(ToHexString(DataSave.MyUdpServer_Buffer, DataSave.MyUdpServer_Siz) + "\n" + DataSave.ClientIP);
}
}
catch (SocketException ex)
{ MessageBox.Show(ex.ErrorCode + ":" + ex.Message);
}
}
如下
public void UdpServerConnect()
{
try
{
MyUdpServer = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); IPEndPoint ServerPoint = new IPEndPoint(IPAddress.Any, UdpPort); MyUdpServer.Bind(ServerPoint);
while(true)
{
Thread UdpRec = new Thread(new ThreadStart(UdpRecThread));
UdpRec.Start();
}
}
catch (SocketException ex)
{ MessageBox.Show(ex.ErrorCode+":"+ex.Message);
}
}
不曉得大家有沒有用
http://msdn.microsoft.com/zh-tw/library/ee707325%28VS.95%29.aspx 多點傳送通訊協定支援 UdpAnySourceMulticastClient 類別Silverlight 4 版中的 System.Net.Sockets 命名空間已加入兩種新的多點傳送用戶端類別的支援。只要本機電腦上的網路啟用 IPv4 和 IPv6 的支援,新的類別即支援使用 IPv4 或 IPv6 多點傳送。這些新類別包括下列: * UdpAnySourceMulticastClient:任何來源的多點傳送流量用戶端接收者,也稱為任意來源多點傳送 (Any Source Multicast,ASM) 或網路標準多點傳送 (Internet Standard Multicast,ISM)。
* UdpSingleSourceMulticastClient:單一來源的多點傳送流量用戶端接收者,也稱為特定來源多點傳送 (Source Specific Multicast,SSM)。
如果有麻煩分享程式碼....
難道只能用.net 2010嗎