由于我不知道你想干嘛,可能没法发现你的错误。
但我刚看了一下你的代码我有几点疑惑:
1.int isInitial = 0;申明为全局变量
  它将导致只有第一个客户,第一个包时执行:
         if(isInitial == 0)
        {
          ......
          isInitial = 1;
        }
  代码段。要想每个客户的第一个包都执行,该参数须由线程函数参数带入。
  这一步的错误可能导致包解析的非法内存操作。
2.send(sd2, receive, 2778, 0)的用法不太妥。
  TCP协议是面向流的协议,它一次发送的字节数,由窗口尺寸确定。
  数据包小,不反对你这种用法,但字节大于1024通常是会被撤分的。
由于我未详细看,只能随便说两句。

解决方案 »

  1.   

    几点说明:
    1、出错是随机的,如果不到10~50hit/s的访问频率,不管访问多少次,都不会出问题。而且出错后,只要不按下“确定”或“取消”按钮,程序仍能“正常”工作;按下按钮后,程序就会退出。
    2、此程序是模拟一个数据库服务器,此数据库服务器只需要初始化一次,而此初始化的过程是滞后(Lazy)的,也就是说,当第一次访问发生的时候,才会去干初始化工作。
    if(isInitial == 0)部分代码就是模拟初始化过程的。
    一个疑问:
    在SocketServer的函数里,已经用try……catch把所有代码都包起来了,怎么还会出错呢?