本帖最后由 zhangshuqiang123 于 2011-03-08 10:22:39 编辑

解决方案 »

  1.   

    WHILE(TRUE)
    {
    //DOSOMETHING
    }
    这东西绝对得设计好的结构,要不很不好用.
    还是花钱雇佣个大师吧
      

  2.   

    51aspx上有哦以前上传的一个示例,也许对楼主有帮助.
      

  3.   

    R和textMessage都属于全局变量,因为服务端是连着发送的,接收端会瞬间分出两个线程执行for (int i = 0; i < R.Length; i++)
    {
           textMessage.AppendText(R[i].ToString("X2"));
    }
    textMessage.AppendText("\n");此时R在两次接收中被赋予了不同的值,就会发生同步问题.所以在不同线程访问R和textMessage时,应该定义一个全局object obj = new object(),然后把上述代码放在lock(obj)
    {
        //
    }中。
    另外数据在发送和接收时,最好在包的开头定义数据长度(正式应用是必须的),这样可以准确判断是否接收到一个完整的包。
      

  4.   


    R = new byte[reDatas.Length];
    R = reDatas;
    这两句同样也有同步问题,既然你已经使用了异步socket,那么没有必要再使用thread,如果担心处理过程长而影响接收,可以把beginreceive放到处理之前,然后处理时只需要锁一次即可,不用新开thread再次加锁。
    规范的做法是把接收到的数据copy到一个较大的缓冲区,然后有一个线程去处理那个大缓冲区中的各个包。