日期:2014-05-17  浏览次数:20402 次

.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

我现在的项目就是按照这个思路去做的 速度很不错