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

解决方案 »

  1.   

    要么用多线程,要么用异步,其实异步不一定好用,很多情况下多线程反而简单,用多线程的话,开一个线程listen服务器的消息,接受到消息放进一个缓冲区中,界面再从缓冲区取消息,做好同步控制,发送消息也一样,就你现在的代码,connect_Click里面的代码移到一个线程里处理,
      

  2.   


    然后线程怎么样通知主窗体,比如服务器发送某一报警消息  就在主界面上某一textbox里面显示
      

  3.   

    "下面要怎么办"?请从简单而完整的东西开始做起呗。如果连客户端socket那几行代码都没有写过,就不要操心什么“长连接、界面卡死”之类的问题。拿出你的已经写完的程序,指出有什么bug,这时候才问别人问题。不要写几个省略号就让别人给你写代码。好比如说你去爬山,假设你对小山包也难以登顶,那么你至少要走到离山包的顶峰距离50米的地方,别人才值得帮你一把。如果你在山脚下问一大堆问题,那么往往只能得到不切实际的回答。