用socket接收数据,如何判断结束或别的解决方法?
public Form1()
         {
             InitializeComponent();
             Thread thread = new Thread(new ThreadStart(Listen));
             thread.Start();
         }          
         protected void Listen()
         {
             socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
             socket.Bind(new IPEndPoint(IPAddress.Any, 2000));
             socket.Listen(0);
             while (true)
             {
                 acceptSocket = socket.Accept();
                 Thread thread = new Thread(new ThreadStart(BeginTempSocket));
                 thread.Start();
             }
             //socket.BeginAccept(new AsyncCallback(AsyncAcceptSocket), socket);   
         }          
         protected void BeginTempSocket()
         {
             try
             {
                 while (true)
                 {
                     //使用socket的send/receive方法来发送/读取数据
                     byte[] receBytes = new byte[1024];
                     acceptSocket.Receive(receBytes, receBytes.Length, 0);
                     string content = Encoding.BigEndianUnicode.GetString(receBytes);
                     rtbxContent.Invoke(new MethodInvoker(delegate
                     {
                         //rtbxContent.Text = "";
                         rtbxContent.AppendText(content);
                     }));
                 }   
             }
             catch (Exception ex)
             {                  
                MessageBox.Show("出错了: \n" + ex.Message, "错误");
             }           
         }
用socket接收数据,代码如上;实际效果是在接收完的末尾光标一直在闪动;界面无法操作;
原因是:while(true)来接收数据,传送的数据接收完以后,还是不断接收空数据,填充接收数组的都是0;
请教:这个地方该如何处理,谢谢!
------解决方案--------------------
数据发送端发送完后把socket关掉。然后你的接收端循环体内部
acceptSocket.Receive(receBytes, receBytes.Length, 0);此函数返回0就代表断开了。跳出循环。
测试的时候发送端和接收端不要在一台机器上。那样测不出来的。
------解决方案--------------------是否结束,你总要有个协议吧,比如先告诉你要发多少数据,然后你接收完就是了,或者给你一个结束标志,否则的话,谁知道完没完,除非连接断开
------解决方案--------------------再响应的内容开头,给一个8字节长度的位置存放一个long类型的数值,接收时读取该值就可以知道数据有多长了,如果没有收完所有数据,连接就中断了,就说明传输过程出错,出错如何重传是你的事了。