.net 即时通讯问题,大神 各位领导都来讨论下
手里有个项目,主要做bs+cs实现即时通讯,可以单聊,私聊群聊。
cs主要是客户端,
bs就是用户了
我现在是走的socket方法,进行通讯
我现在可以给服务器发送信息,但是服务器给我信息我也能收到,但是前台不显示。
贴代码:
- C# code
//连接客户端 private void SendSocket() { labmsg.InnerText = "正在建立连接"; //连接 socket = new AsySocket(Cip, port); socket.OnSended += new AsySocketEventHandler(socket_OnSended); socket.OnSendTo += new AsySocketEventHandler(socket_OnSendTo); socket.OnStringDataAccept += new StringDataAcceptHandler(socket_OnStringDataAccept); socket.OnClosed += new AsySocketClosedEventHandler(socket_OnClosed); try { socket.LinkObject.Connect(Cip, port); } catch { labmsg.InnerText = "连接失败"; return; } labmsg.InnerText = "连接成功"; socket.BeginAcceptData(); } void socket_OnSended(string SenderID, string EventMessage) { labcontent.Text += "<br/>我:"+txtcontent.Value.Trim(); } void socket_OnClosed(string SocketID, string ErrorMessage) { //服务器关闭 Page.ClientScript.RegisterClientScriptBlock(GetType(), "key", "<script>alert('服务器关闭')</script>"); } void socket_OnSendTo(string SenderID, string EventMessage) { throw new Exception("The method or operation is not implemented."); } void socket_OnStringDataAccept(string AccepterID, string AcceptData) { //AddMsg(AcceptData); pmsg += AcceptData.ToString() + "<br/>"; labcontent.Text += AcceptData.ToString(); Page.ClientScript.RegisterStartupScript(GetType(), "key", "<script>almsg('"+AcceptData.ToString()+"');</script>"); } private void AddMsg(string msg) { labcontent.Text += Environment.NewLine + msg; } //发送信息 protected void btnsend_Click(object sender, EventArgs e) { socket.ASend("Me:" + txtcontent.Value.Trim() + AsySocket.EndChar); }void socket_OnStringDataAccept(string AccepterID, string AcceptData)
{}
次方法就是客户端回复给我的信息,但是他是属于无刷新的, 我设置断点,客户端给我发送信息,我能接收到,但是没办法在前台显示。
这应该怎么解决呢,后台能接受数据,前台也能显示呢??
小弟分不多了先来 80吧
[解决办法]
使用Comet思想
Comet:基于 HTTP 长连接的“服务器推”技术
跟Ajax轮询不一样的 楼主可以仔细研究下这篇文章 了解什么叫Comet
然后再看
Asp.net 构建可扩展的的Comet Web 应用
这是yanghua_kobe兄翻译的一篇文章
英文地址是http://www.codeproject.com/KB/aspnet/CometAsync.aspx
我现在的项目就是按照这个思路去做的 速度很不错