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

关于socket client异步接收数据
C# code

        private void connect_Click(object sender, EventArgs e)
        {
            try
            {
                IPAddress dcip = IPAddress.Parse(dccip.Text);
                int dcport = int.Parse(dccport.Text);
                dc = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                IPEndPoint dcc = new IPEndPoint(dcip, dcport);
                dc.Connect(dcc);
            }
            catch (Exception err)
            {
                MessageBox.Show(err.Message, "连接DCC出错", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }

           //下面要怎么办。。。
            
        }



winform的

这个是客户端,要求是客户端和服务器长连接,服务端随时可能发送数据到客户端,这段代码写到这里不会了,如果是下面直接开始接收数据,界面就卡死不能用了。。。需要的是那种,界面能继续使用,又不影响客户端给服务器发送消息,又可以随时接收服务器发来的消息

------解决方案--------------------
要么用多线程,要么用异步,其实异步不一定好用,很多情况下多线程反而简单,

用多线程的话,开一个线程listen服务器的消息,接受到消息放进一个缓冲区中,界面再从缓冲区取消息,做好同步控制,

发送消息也一样,就你现在的代码,connect_Click里面的代码移到一个线程里处理,