首页 新闻 会员 周边

socket通信中服务器端已经从Stream中读出数据,如何将读取的数据显示

0
悬赏园豆:10 [已解决问题] 解决于 2016-01-12 21:40
using System;
using System.Text;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Net;
using System.Net.Sockets;
using System.Threading;
using System.IO;

namespace win2web_web
{
    public partial class welcome : System.Web.UI.Page
    {

        static int count = 0;

        private Socket s;   //定义Socket对象
        private Thread th;  //客户端连接服务器的线程
        public Socket cSocket;  //单个客户端连接的Socket对象
        public NetworkStream ns;  //网络流
        public StreamReader sr;  //流读取
        public StreamWriter sw;  //流写入
        private delegate void SetTextCallback(); //用于操作主线程控件
        
        protected string dispaly { get; set; }

        protected void Page_Load(object sender, EventArgs e)
        {
            
        }

        protected void bt_start_Click(object sender, EventArgs e)
        {

            bt_start.Enabled = false;
            s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            IPAddress serverIP = IPAddress.Parse("115.156.186.55");
            IPEndPoint server = new IPEndPoint(serverIP, 1737);
            s.Bind(server);
            s.Listen(10);
            try
            {
                th = new Thread(new ThreadStart(Communication));
                th.Start();
                lblConnet.Text = "服务器启动成功!";


            }
            catch (Exception ex)
            {
                lblError.Text = "服务器启动失败!" + ex.Message;
            }

        }

        public void Communication()
        {
            while (true)
            {
                try
                {
                    cSocket = s.Accept();   //用cSocket来代表该客户端连接
                    if (cSocket.Connected)   //测试是否连接成功
                    {
                        ns = new NetworkStream(cSocket);//建立网络流,便于数据的读取
                        sr = new StreamReader(ns);  //实例化流读取对象
                        sw = new StreamWriter(ns); //实例化写入流对象
                        test(); //从流中读取
                        sw.WriteLine("收到请求,允许连接"); //向流中写入数据
                        sw.Flush(); //清理缓冲区
                    }
                    else
                    {
                        lblError.Text = "连接失败";
                    }

                }
                catch (SocketException ex)
                {
                    lblError.Text = ex.Message; //捕获Socket异常
                }
                catch (Exception es)
                {
                    lblError.Text = "其它异常" + es.Message; //捕获其他异常
                }
            }

        }

        public void send()
        {
            lbInfo.Items.Add(sr.ReadLine() + "\n");
        }


        public void test()
        {
            SetTextCallback stcb = new SetTextCallback(send);
            //Invoke(stcb);
            dispaly = sr.ReadLine();
           //lblSend.Text = dispaly;
            lblSend.Text = "123456";
            //问题就是这个语句给控件Label直接赋值都不能在前端显示?怎么解决

        }

        protected void btnClose_Click(object sender, EventArgs e)
        {
            //s_Sock.Close();
            s.Close();
        }

        protected void OnTimeTick(object sender, EventArgs e)
        {
            count++;
            if (count > 10)
                count = 0;
            tbDisplay.Text =  "--" + count.ToString();
        }
    }
}

在.aspx文件中 label语句如下:

<asp:Label ID="lblSend" runat="server" Text=<%#dispaly %>></asp:Label>

希望各路大神不吝赐教!

寒叶峰的主页 寒叶峰 | 初学一级 | 园豆:187
提问于:2016-01-11 15:07
< >
分享
最佳答案
0

这种用法有问题,既然是aspx页面,就要注意其生命期,页面点击后启动线程,多点几次就会出问题,socket关联的线程如何处理销毁

看你的意思,需要查看服务端的一个操作的进展信息,这个可以使用websocket或者comet这类的技术配服务实现,而不能在页面中这样做,这种写法是windows客户端程序的做法,web程序的模式和客户端差别很大

收获园豆:10
2012 | 高人七级 |园豆:21230 | 2016-01-11 18:50

嗯  你说的很对 我这种写法是按照window客户端的写法来的,我之前一直写windows客户端的,这是第一次写网站。其实我要实现的目的很简单就是从windows客户端中发出数据然给服务器然后在网页上显示,对于上面我想在控件lblSent中写入数据 lblSent.Text = display; 这里将display设置为static就可以显示了,关于websocket我今天在网上才看到,是网页实时监控的利器如果你有关于websocket的好的学习资料希望和网站希望告知一二,谢谢了

寒叶峰 | 园豆:187 (初学一级) | 2016-01-12 21:39
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册