我的网站是一个socket的server端。。因为我需要启动网站就开始监听socket端。我把启动serversocket写在了application_start中,调试的时候是可以与client连接以及通信的。但是因为我需要取得server端接收到的数据。 但是因为application_start是只启动一次,我取到的值一直都是最初的值,那我应该要用怎么样的思路才可以完成这样的工作呢?谢谢大家急等啊。。

解决方案 »

  1.   

    有木有人帮帮忙呢?
    实在是困恼。
    或者这个不写在application_start中。。我要实现的是一次启动,然后就是监听,取得数据包,返回显示到页面上。
      

  2.   

    不写在application_start
    session存第一个值 定时获取session来更新页面上的信息 在显示。
      

  3.   

    在application_start中开启线程,循环监听就行了
      

  4.   


    恩。我在application_start中启动了一个线程来运行sever。我想取得client 发送到server的数据包data1.server端其实已经接收到数据了,可是我该如何取到这个数据包呢?我用application["data"]来保存线程中返回的data1.可是这个值不会有变化。我第一次启动的时候,application["data"]会有改变一次,但是之后的client发送过来的数据就无法保存到application["data"]中了
      

  5.   

    application是全局的吧,有重新赋值的话,应该是可以的吧
      

  6.   


    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using ServerSocket;
    using System.Xml.Linq;
    using System.Xml;/// <summary>
    ///Class2 的摘要说明
    /// </summary>
    public class Class2:BusinessHandler
    {
        static string ee = "我是ee";
        private ServerSocket.ServerSocket serversocket;
        private List<StateObject> states;
        XmlDocument xmlDom = new XmlDocument();
    public Class2()
    {
            serversocket = new ServerSocket.ServerSocket("127.0.0.1", 8888, this);
            serversocket.BeginListenAndAccept(20);
            states = new List<StateObject>();
    }
       
        public bool AcceptCallbackHandler(StateObject state)
        {
            states.Add(state);
            return true;
        }    public void DisconnectCallbackHandler(StateObject state)
        {
            states.Remove(state);//移除states中的用户信息
            serversocket.Disconnect(state);//断开state的socket连接
        }    public void ErrorHandler(Exception exception, StateObject state, string msg)
        {
            
        }    public bool ReceiveCallbackHandler(StateObject state)
        {
            string receivedata = state.GetReceiveData();
            string rece = "NO";
            ee = receivedata;
            
            XDocument xdoc = XDocument.Parse(receivedata);
            XElement xe = xdoc.Root;
            if (xe.Name == "login")
            {
                state.obj = xe.Value;
            }
            
            else if (xe.Name == "speak")
            {
                XAttribute att_sourcename = xe.Attribute("source");
                rece = "<speak source=\"" + att_sourcename.Value + "\">" + xe.Value + "</speak>";
                foreach (StateObject sta in states)
                {
                    serversocket.Send(sta, rece);
                }
            }
            return true;
        }
        public string returnstring()
        {
            return ee;
        }
        public void SendCallbackHandler(StateObject state)
        {
        }
    }
    这是我的class2.cs  文件的内容,class2类
    里面写了监听client的方法
    <script runat="server">
        static string s = "我是s";
        void Application_Start(object sender, EventArgs e) 
        {
            Class2 c2 = new Class2();
            s = c2.returnstring();//返回当前server端接收到client端发送过来的数据
            Application["data"] = s;
        }  
    这里是我global.asax文件中有做修改的地方
    这样我运行系统后。。application["data"]的值会是"我是ee"   即使client端由发送数据。还是不会改变application["data"]的值我应该如何解决呢?
    谢谢大家了!!
      

  7.   

    谢谢各位。我研究出来了。
    我在application_start 中初始化class2类。之后传递 application["h"]l来传递