我用asp.net、ajax结合UdpClient做了个小程序,但遇到了些麻烦        public UdpClient receivingUdpClient;
        public IPEndPoint RemoteIpENdPoint = new IPEndPoint(System.Net.IPAddress.Any, 0);
        public System.Threading.Thread ThreadReceive;
        int SocketNo;
        public string strReturenData;        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                SocketNo = Convert.ToInt32("11000");
                receivingUdpClient = new UdpClient(SocketNo);
            }
        }
我在Timer里调用线程ThreadReceive = new System.Threading.Thread(new System.Threading.ThreadStart(ReceiveMessage));
ThreadReceive.Start();
但这样就会出现一个问题,receivingUdpClient经过Page_Load第一次实例化后,随着Timer刷新receivingUdpClient对象会变为空。我也不能把receivingUdpClient实例化的语句放在Timer里,因为receivingUdpClient每次都去实例化就会出错,套接关键字只能用一次。请问我怎么解决这个问题?

解决方案 »

  1.   

    public static UdpClient receivingUdpClient
    就可以了,把udpClient变成静态的,或者用session["UdpClient"] = receivingUdpClient,用session把receivingUdpClient实例保存住就可以了
      

  2.   

    to tjvictor :闭关页面后,也就是使用完了就要释放UdpClient,这个要怎么做?
      

  3.   

    用session来保存UdpClient实例吧,当你关闭页面后,session也就被自动清空了。
      

  4.   

    to tjvictor :如果用session来保存,那么在调试web时会遇到问题,就是每次都要停止web服务,不然再次启动程序时还会提示套接关键字只允许使用一次to wuxing2006 :因为我的页面里使用了ajax,用timer进行刷新udp接收到的数据,如果不保存udp对象,刷新后就对象就丢失了。如果每次建立,就会提示套接关键字只允许用一次
      

  5.   

     public UdpClient receivingUdpClient;if (!IsPostBack)
                {
                    SocketNo = Convert.ToInt32("11000");
                    receivingUdpClient = new UdpClient(SocketNo);
    session["receivingUdpClient"] = receivingUdpClient ;
                }
    用的时候
    if(session["receivingUdpClient"]!=null)
     {
     UdpClient client = session["receivingUdpClient"] as UdpClient ;
    ......
    }
      

  6.   

    Click the link to solve your problem.Good luck!