cs代码改BS

six-years 2013-11-19 08:36:52
哪位大侠帮我把下面的CS代码改成BS的
代码工作的原理就是SOCKET接收数据后刷新gridview 要测试通过的
这是第六百分了 还是没有解决


private delegate void ShowMsg(string strMsg);
private ShowMsg SM;
DataTable dt = new DataTable();
protected void Page_Load(object sender, EventArgs e)
{
SM += new ShowMsg(SetLabel);

dt.Columns.Add("yvalue", typeof(string));
dt.Rows.Add();
}
private void SetLabel(string strMsg)
{

gvOpint.DataSource = dt;
gvOpint.DataBind();
}
protected void Button1_Click1(object sender, EventArgs e)
{
Sockelisten();

}
void Sockelisten()
{

IPAddress ips = Dns.GetHostAddresses(Dns.GetHostName())[0];
IPEndPoint ip = new IPEndPoint(IPAddress.Parse("192.168.2.59"), 6666);
Socket soc = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
soc.Bind(ip);
soc.Listen(10);
Socket hander = soc.Accept();
while (true)
{
byte[] bytes = new byte[1024];
int len = hander.Receive(bytes);
string st = Encoding.Default.GetString(bytes);
dt.Rows.Add();
dt.Rows[dt.Rows.Count - 1][0] = st;

GridView.Invoke(SM); //这一句代码在CS中是会报错的

Thread.Sleep(1000);
}
}
...全文
326 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
six-years 2013-11-21
  • 打赏
  • 举报
回复
各位问题已经解决了 bs里面也有特timer控件刷新 我以为BS没有 呵呵 虽然不能实现一来数据就绑定 但也勉勉强强把
junlinfushi 2013-11-19
  • 打赏
  • 举报
回复
顶贴,记得给分哦,亲
six-years 2013-11-19
  • 打赏
  • 举报
回复
用AJAX获取后台JSON数据 然后通过ext倒是可以实现 就是现在有一个问题 datatable转换为JSON的时候 可能是因为多线程处理的datatable 导致转换不完全 只能得到第一个列的值 后面的得不到
引用 7 楼 zxy397472251 的回复:
setTimeout( "ajax请求" , 1000 ); ajax请求:$.ajax.....
CqCoder 2013-11-19
  • 打赏
  • 举报
回复
引用 9 楼 Q1092926267 的回复:
前台如下

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<script src="jquery-1.8.3.min.js" type="text/ecmascript"></script>
    <title></title>
    <script type="text/javascript">
		window.setInterval(getAjaxData, 5000);


		function getAjaxData(){
	$.ajax({
		type: "GET",
		async: false,
	    //url: "WebForm2.aspx?abc="+Math.random(),
		//dataType: "html",
		url: "WebForm1.aspx/SetLabel",
		contentType: "application/json; charset=utf-8",
		dataType: "json",
		success: function(data) {     
		    //返回的数据用data.d获取内容      
		    alert(data.d);     
		},     
		error: function(err) {     
		    alert(err);     
		}   
		//success:function(html){      
		//		$("#ajaxData").html(html);
			
		//}
	});
}
    </script>
</head>

<body>
    <form id="form1" runat="server">
    <div id="ajaxData"></div><asp:GridView runat="server" ID="GridView1"></asp:GridView>
    </form>
</body>
</html>

后台

        static DataTable dt = new DataTable();
        protected void Page_Load(object sender, EventArgs e)
        {
            dt.Columns.Add("yvalue", typeof(string));
            dt.Rows.Add();
            dt.Rows[dt.Rows.Count - 1][0] = "开始";
            GridView1.DataSource = dt;
            GridView1.DataBind();
            Thread t = new Thread(new ThreadStart(rand));
            t.Start();

        }
        private string SetLabel()
        {
            GridView1.DataSource = dt;
            GridView1.DataBind();
            return "cs";
        }
        void rand()
        {
            for (int i = 0; i < 100;i++ )
            {
                dt.Rows.Add();
                dt.Rows[dt.Rows.Count - 1][0] = i.ToString()+"开始";
                Thread.Sleep(5000);
            }
        }


    }
}
我这个是模拟的SOCKET接收 SOCKET接收也是不断的更新datatable 我这个也是 然后前台AJAX调用绑定函数 结果只弹窗 没刷新AJAX [quote=引用 7 楼 zxy397472251 的回复:] setTimeout( "ajax请求" , 1000 ); ajax请求:$.ajax.....
[/quote] return "cs"; 改为 return "{result:\"cs\"}"
showjim 2013-11-19
  • 打赏
  • 举报
回复
ajax长轮询
wyufen 2013-11-19
  • 打赏
  • 举报
回复
ajax局部刷新技术可以解决你的问题
小猪八Q 2013-11-19
  • 打赏
  • 举报
回复
引用 6 楼 Q1092926267 的回复:
[quote=引用 2 楼 wpfLove 的回复:] B/S和C/S的工作原理是不一样的,你的这个Socket目前是无法实现,或者说技术上不太成熟的,你浏览器所看到的所有内容,都是执行在服务器端,并将结果html返回的。你看到的只是呈现而已 既然要改成BS架构的,那么就要从思维和观念上先改变,CS操作的本地机器的内容,所以你监听端口也好等等操作,这些资源都是可控的,而BS的所有操作,其实都是将请求发送到服务器端,由服务端执行。 你还是首先了解下B/S的情况吧
那按你的意思是这东西用BS无法实现?不会吧??这是老大交给我的任务 还说这两天就要的 我因为这些年都是做CS BS基本也是做ERP什么的 像AJAX轮询什么的很生疏 所以老大给任务的时候我还特意问了用BS还是CS 结果老大要BS的 好蛋疼啊 CS半个小时就可以了 偏要我用BS 我该怎么办 小弟还在试用期啊 苦逼[/quote] 也就是上面几楼说的,使用ajax定时刷新,不断请求,以模拟服务器的推送功能。我以前做BS是,经常使用AjaxPro来出来Ajax的,其他的都是js的写法,只要简单了解下AjaxPro的用法,就OK了 http://www.cnblogs.com/lexus/archive/2007/11/29/977281.html 这个AjaxPro的教程,是比较简单的,很容易的,你操作下,或者直接在项目中使用也可以,JS方面就看你的基础了,不行在了解学习下js。 还是那句话,改变思想,你做的是B/S,而不是C/S
xxlxmd 2013-11-19
  • 打赏
  • 举报
回复
放个TIMER 定时刷吧
six-years 2013-11-19
  • 打赏
  • 举报
回复
前台如下

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<script src="jquery-1.8.3.min.js" type="text/ecmascript"></script>
    <title></title>
    <script type="text/javascript">
		window.setInterval(getAjaxData, 5000);


		function getAjaxData(){
	$.ajax({
		type: "GET",
		async: false,
	    //url: "WebForm2.aspx?abc="+Math.random(),
		//dataType: "html",
		url: "WebForm1.aspx/SetLabel",
		contentType: "application/json; charset=utf-8",
		dataType: "json",
		success: function(data) {     
		    //返回的数据用data.d获取内容      
		    alert(data.d);     
		},     
		error: function(err) {     
		    alert(err);     
		}   
		//success:function(html){      
		//		$("#ajaxData").html(html);
			
		//}
	});
}
    </script>
</head>

<body>
    <form id="form1" runat="server">
    <div id="ajaxData"></div><asp:GridView runat="server" ID="GridView1"></asp:GridView>
    </form>
</body>
</html>

后台

        static DataTable dt = new DataTable();
        protected void Page_Load(object sender, EventArgs e)
        {
            dt.Columns.Add("yvalue", typeof(string));
            dt.Rows.Add();
            dt.Rows[dt.Rows.Count - 1][0] = "开始";
            GridView1.DataSource = dt;
            GridView1.DataBind();
            Thread t = new Thread(new ThreadStart(rand));
            t.Start();

        }
        private string SetLabel()
        {
            GridView1.DataSource = dt;
            GridView1.DataBind();
            return "cs";
        }
        void rand()
        {
            for (int i = 0; i < 100;i++ )
            {
                dt.Rows.Add();
                dt.Rows[dt.Rows.Count - 1][0] = i.ToString()+"开始";
                Thread.Sleep(5000);
            }
        }


    }
}
我这个是模拟的SOCKET接收 SOCKET接收也是不断的更新datatable 我这个也是 然后前台AJAX调用绑定函数 结果只弹窗 没刷新AJAX
引用 7 楼 zxy397472251 的回复:
setTimeout( "ajax请求" , 1000 ); ajax请求:$.ajax.....
six-years 2013-11-19
  • 打赏
  • 举报
回复
引用 7 楼 zxy397472251 的回复:
setTimeout( "ajax请求" , 1000 ); ajax请求:$.ajax.....
这个我写了一个 但是有问题 我吧代码发给你 你给我改一下好吧
CqCoder 2013-11-19
  • 打赏
  • 举报
回复
setTimeout( "ajax请求" , 1000 ); ajax请求:$.ajax.....
six-years 2013-11-19
  • 打赏
  • 举报
回复
引用 2 楼 wpfLove 的回复:
B/S和C/S的工作原理是不一样的,你的这个Socket目前是无法实现,或者说技术上不太成熟的,你浏览器所看到的所有内容,都是执行在服务器端,并将结果html返回的。你看到的只是呈现而已 既然要改成BS架构的,那么就要从思维和观念上先改变,CS操作的本地机器的内容,所以你监听端口也好等等操作,这些资源都是可控的,而BS的所有操作,其实都是将请求发送到服务器端,由服务端执行。 你还是首先了解下B/S的情况吧
那按你的意思是这东西用BS无法实现?不会吧??这是老大交给我的任务 还说这两天就要的 我因为这些年都是做CS BS基本也是做ERP什么的 像AJAX轮询什么的很生疏 所以老大给任务的时候我还特意问了用BS还是CS 结果老大要BS的 好蛋疼啊 CS半个小时就可以了 偏要我用BS 我该怎么办 小弟还在试用期啊 苦逼
six-years 2013-11-19
  • 打赏
  • 举报
回复
引用 4 楼 zxy397472251 的回复:
为什么不用ajax定时去轮询呢?
不会用ajax轮询 兄弟帮我写一个呗
CqCoder 2013-11-19
  • 打赏
  • 举报
回复
为什么不用ajax定时去轮询呢?
junlinfushi 2013-11-19
  • 打赏
  • 举报
回复
引用 2 楼 wpfLove 的回复:
B/S和C/S的工作原理是不一样的,你的这个Socket目前是无法实现,或者说技术上不太成熟的,你浏览器所看到的所有内容,都是执行在服务器端,并将结果html返回的。你看到的只是呈现而已 既然要改成BS架构的,那么就要从思维和观念上先改变,CS操作的本地机器的内容,所以你监听端口也好等等操作,这些资源都是可控的,而BS的所有操作,其实都是将请求发送到服务器端,由服务端执行。 你还是首先了解下B/S的情况吧
+1
小猪八Q 2013-11-19
  • 打赏
  • 举报
回复
B/S和C/S的工作原理是不一样的,你的这个Socket目前是无法实现,或者说技术上不太成熟的,你浏览器所看到的所有内容,都是执行在服务器端,并将结果html返回的。你看到的只是呈现而已 既然要改成BS架构的,那么就要从思维和观念上先改变,CS操作的本地机器的内容,所以你监听端口也好等等操作,这些资源都是可控的,而BS的所有操作,其实都是将请求发送到服务器端,由服务端执行。 你还是首先了解下B/S的情况吧
six-years 2013-11-19
  • 打赏
  • 举报
回复
http://bbs.csdn.net/topics/390645545 http://bbs.csdn.net/topics/390645663 http://bbs.csdn.net/topics/390645605 这三个帖子都没有找到答案 这是第四个了 大侠 不管你用什么方法 只要实现功能就行了 要BS的代码

110,566

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧