解决方案 »

  1.   

    估计你接收事件中的处理代码太耗时了,可以考虑将接收到的数据先放到内存(List),然后开一个线程,逐条处理List中的内容
      

  2.   

    我不太熟悉啊,我是直接在一个while(true)里接收Server.Receive(buffer, buffer.Length, 0);
    紧接着  MessageBox.Show(s);
    然后   fs.Write(buffer, 0, buffer.Length);
    可能怎么修改合适呢?我不太熟悉,可能你说的是一个很基础的,我没明白,能不能说的再详细一点,谢谢了。
      

  3.   

    List list=new List();new 一个集合,把20条数据都放进去,因为你的处理速度慢,所以先全部存起来,数据有了,后面慢就无所谓了。接收完 了就写个循环从LIST 写到文件就好了,弹不弹都无所谓,最后给个提示处理完成就好了,处理了多少条
      

  4.   

    以下是我写的代码,用了ArrayList后还是一样的结果,单步调试能够接收到所有的数据,并能把数据都写入到文件里。生成解决方案后运行可执行程序却还是只接收到第一笔数据,文件里写的也只有第一笔数据。请高手们帮帮忙,帮我看一下我的代码哪里写错了,十分感谢。
     private void bt_saveas_Click(object sender, EventArgs e)
            {
                SaveFileDialog sfd = new SaveFileDialog(); //创建一个打开对话框
                sfd.Filter = "文本文件(*.txt)|*.txt|所有(*.*)|*.*";  //设置文件类型
                sfd.FilterIndex = 1;  //设置默认文件类型显示顺序
                sfd.AddExtension = true;  //如果用户没有输入扩展名,自动追加后缀            if (sfd.ShowDialog() == DialogResult.OK)  //点了保存按钮进入
                {
                    System.IO.Stream fs = sfd.OpenFile();                try
                    {
                        Socket Server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                        IPAddress adr = IPAddress.Parse(this.tb_ipaddress.Text);
                        int port = Convert.ToInt32(this.tb_port.Text);
                        
                        IPEndPoint ep = new IPEndPoint(adr, port);
                        Server.Connect(ep);                    byte[] msg = Encoding.UTF8.GetBytes("revok");
                        byte[] buffer = new byte[65535];
                        int end = 0;
                        string s;
                      
                        int i = 0;
                        while (true)
                        {
                            i = Server.Receive(buffer, buffer.Length, 0);
                        //    System.Threading.Thread.Sleep(20000);                        ArrayList list = new ArrayList();
                            list.AddRange(buffer);
                            byte[] revbuffernew = (byte[])list.ToArray(typeof(byte));
                            MessageBox.Show(System.Text.Encoding.Default.GetString(revbuffernew));
                            MessageBox.Show("after!!!!!!!");
                           
                            s = System.Text.Encoding.Default.GetString(buffer);
                            MessageBox.Show(s);
                    //        fs.Write(buffer, 0, buffer.Length);
                            fs.Write(revbuffernew, 0, revbuffernew.Length);                        if (i > 0) break;
                         }
                        System.Threading.Thread.Sleep(5000);
                        MessageBox.Show(s);
                         MessageBox.Show("have received data");
                        i = 0;
                        i = Server.Send(msg);                   if (i > 0)
                        {        
                              while (buffer[end] != 0)
                              {
                                end++;
                              }
                             
                             Server.Shutdown(SocketShutdown.Both);
                             Server.Close();
                         }
                        
                    }
                    catch (SocketException b)
                    {
                      MessageBox.Show("in catch SocketException b");
                    }
                          
                    fs.Close();
                    MessageBox.Show("receive all ok!!!!!!!");
                }        }