诸位达人,我现在想建一个UDP监听指定端口,收到的数据报做分析,可我怎么建立他的监听,按照例子,好象不行,代码如下:
UdpClient Server;
Thread startServer
Server = new UdpClient(7202);
startServer = new Thread(new ThreadStart(UDPServer));
startServer.Start();private void UDPServer()
{
    while (!Done) 
    {
        try 
        {
    byte[] bytes = Server.Receive(ref Cfg.localEndPoint);     string Read_str = Encoding.ASCII.GetString(bytes,0,bytes.Length);
    if (Read_str=="DeskLogeRefresh\0")
    {
 Cfg.RequestUpdateStatus = true;
    }
         }
catch(SocketException)
{
    break;
}  
    }
}
我印象中 UDPServer()应该一有数据来就执行一下,可他只是在一开始只执行了一次,就不再动弹了,哪位达人指点一下,我这段程序是用在PDA上的,接收数据是C#,发广播是其它开发工具开发的.

解决方案 »

  1.   

    看看这个,有抄网络中的。private UdpClient server ;
    private IPEndPoint receivePoint ;
    private int port = 8080 ; 
    private int ip = 127001 ;
    private Thread startServer 
     
    server = new UdpClient ( port ) ;
    receivePoint = new IPEndPoint ( new IPAddress ( ip ) , port ) ;
    startServer = new Thread ( new ThreadStart ( start_server ) ) ;
    startServer.Start ( ) ;byte[] recData = server.Receive ( ref receivePoint ) ;ASCIIEncoding encode = new ASCIIEncoding ( ) ;
    string Read_str = encode.GetString ( recData ) ;
    string[] temp = Read_str.Split ( "/".ToCharArray ( ) ) ;
    byte[] sendData =encode.GetBytes( System.DateTime.Now.ToString ( ) ) ;
    server.Send ( sendData , sendData.Length , temp[0] , Int32.Parse ( temp[1] ) ) ;
      

  2.   

    byte[] bytes = Server.Receive(ref Cfg.localEndPoint);
    会不会在这里卡住了?
      

  3.   

    public bool isQuit = false;
    private void UDPServer()
    {
    while (!Done) 
    {
    try 
    {
    byte[] bytes = Server.Receive(ref Cfg.localEndPoint);
    string Read_str = Encoding.ASCII.GetString(bytes,0,bytes.Length);
    if (Read_str=="DeskLogeRefresh\0")
    {
    Cfg.RequestUpdateStatus = true;
    }
    }
    catch(SocketException)
    {
    isQuit = true;
    break;
    }
    catch(Exception)
    {
    isQuit = true;
    //这里的异常如果你不捕捉只会死掉当前线程,不会死进程,那么你看不出任何不对
    }
    }
    }
      

  4.   

    byte[] bytes = Server.Receive(ref Cfg.localEndPoint);
    会不会在这里卡住了?
    -------------------------------
    这句一定会卡住的,如果没有数据进来的话。
      

  5.   

    byte[] bytes = Server.Receive(ref Cfg.localEndPoint); 这句真的卡住了,指点一下吧,怎么整?
      

  6.   

    感觉阻塞在这里就不动了,再有数据报也收不到了,郁闷中ing
      

  7.   

    现在看来做成WinForm程序没问题,可是变成PDA上PocketPc用的就有问题,谁指点一下
    private void Form1_Load(object sender, System.EventArgs e)
    {
         udp = new System.Net.Sockets.UdpClient(7202);
         t = new System.Threading.Thread(new System.Threading.ThreadStart(listen));
         //将线程转为后台运行(当托管线程关闭的时候此现成也关闭)
         t.IsBackground=true;//*******这个方法在PocketPC中没有              
         t.Start();
    }void listen()
    {
         //线程等待2秒
         System.Threading.Thread.Sleep(2000);// 确保 client2 正在接收
         //创建远程主机网络端点(这里未明确指定,表示任何远程机端点)
         System.Net.IPEndPoint ep =new System.Net.IPEndPoint(System.Net.IPAddress.Any,0);
         while(true)
         {
     string abc = System.Text.Encoding.UTF8.GetString(udp.Receive(ref ep));//***这个在PocketPC中还需要2个参数
     label1.Text = abc;
         }
     
    }