現在我的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);
            }
}

解决方案 »

  1.   

    中午什休時修改server可以一個一個接無法像tcplisten 同時可以接很多client
    如下
      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)。 
      

  2.   

    有人有寫過  UdpAnySourceMulticastClient . UdpSingleSourceMulticastClient
    如果有麻煩分享程式碼....
      

  3.   

    以為updata .net framework 4就可以用UdpSingleSourceMulticastClient這個方法
    難道只能用.net 2010嗎