發現程式只RUN一次,即使我用CLIENT 端傳資料給SERVER端 它沒有任何動作1.Debug結果發現背景執行緒執行完就歸完主要執行緒2.曾在UdpWaitOnClient funtion裡加了if(MyUdpServer != null && UdpThread.IsAlive !=null)
  接收二至三次 server端沒有接收3.若用while(tree) 則出現10055訊息:buffer空間不足
可以上網代表我寫程式的宣告變數占太大間嗎?public void udpConn()
{
 try
{
               
        MyUdpServer = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
                
        IPEndPoint ServerPoint = new IPEndPoint(IPAddress.Any, UdpPort);        MyUdpServer.Bind(ServerPoint);        UdpThread = new Thread(new ThreadStart(UdpWaitOnClient) );
         UdpThread.Name = "UdpRec";
        UdpThread.Start();          
 }public void UdpWaitOnClient()
{
  Rec Data
}

解决方案 »

  1.   

    自己google demo吧!http://www.google.com.hk/search?hl=zh-CN&lr=lang_zh-CN%7Clang_zh-TW&newwindow=1&safe=strict&rls=com.microsoft%3Azh-cn%3AIE-SearchBox&tbs=lr%3Alang_1zh-CN%7Clang_1zh-TW&q=socket.receivefrom&aq=f&aqi=g1&aql=&oq=&gs_rfai=
    http://www.google.com.hk/search?q=udpclient.receive&hl=zh-CN&newwindow=1&safe=strict&rls=com.microsoft:zh-cn:IE-SearchBox&prmd=fd&source=lnt&tbs=lr:lang_1zh-CN%7Clang_1zh-TW&lr=lang_zh-CN%7Clang_zh-TW&sa=X&ei=ezaoTIa1O4_CcdbcvM0N&ved=0CAcQpwU
      

  2.   

    正因为空谈“伪代码”了,结果自己纠结了——因为问题就在“伪”得不是地方,说出了你是如何receive的细节才可能解决问题。哦,看了一下msdn的所谓demo,真是“恶心”,它竟然只是receive一次然后就close了服务。msdn上关于异步通讯的例子其实更恶心,用同步阻塞来做异步,等于脱裤子放屁。其实你自己想就能明白,对于同步receive,你可以在receive之后(顺序处理数据或者异步处理处理数据之后)再执行一个receive,循环执行receive直到你需要退出循环。
      

  3.   


    udp默认值是最多一次只能接收64K字节,遇到更大的消息内容应该重新定义你的协议来解决。但是你没有一句明确的代码,看不出来什么地方会出现异常,也就不知道到底是怎么回事。
      

  4.   

    第三點更改buffer空間 由原來1000改為100可run一次 ,system  display error 10055 ,改用struct看看
     
           
            byte[] byteData = new byte[0x100]; 
            private void UdpWaitOnClient( )
            {
                IPEndPoint ClinetOpen = new IPEndPoint(IPAddress.Any, 0);
                EndPoint ClientRemo = (EndPoint)ClinetOpen;
                // Data.UdpSocket Data = new Data.UdpSocket();// struct 
               
               while(true)
               {
                   MyUdpServer.BeginReceiveFrom(byteData, 0,  byteData.Length, SocketFlags.None, ref ClientRemo, new AsyncCallback(UdpRecCallback), ClientRemo);
               }
               
            }
               }
               
            }
      

  5.   

    改回最早版本執行緒 程式在while()等udp client 是否上門,睡醒改程式居然又可以..
    還是在加  BackgroundWorker確保程式穩定..

            byte[] byteData = new byte[0x100];
            private void UdpWaitOnClient( )
            {
                IPEndPoint ClinetOpen = new IPEndPoint(IPAddress.Any, 0);
                EndPoint ClientRemo = (EndPoint)ClinetOpen;
     
               while(MyUdpServer!=null &&UdpThread.IsAlive!=null)
               {
                   MyUdpServer.BeginReceiveFrom(byteData, 0, byteData.Length, SocketFlags.None, ref ClientRemo, new AsyncCallback(UdpRecCallback), ClientRemo);
               }
               
            }
      

  6.   

    怎麼清除buffer空間. close system 在打開system 空間不足