现在有一个这样的程序: 在服务器端有各种产品,并且是有限数目的。在客户端提出申请某种产品,如果该产品存在则保持连接……
  现在出现了一个非常奇怪的现象,在用一个客户机第一次连接服务器申请产品的时候,并且该产品还存在,但却出现了“已经没有产品”的提示,但再次连接后,就成功了。
   不是每台机器第一次连接都有这样的问题!
   程序采用 C/S 模式,SOCKET编程!
   各位高手,请分析一下各种可能的情况,谢谢,重分相送!!

解决方案 »

  1.   

    这与SOCKET无关。应该是处理方面的问题。
    把处理申请产品的代码贴出来看看。
      

  2.   

    这只是程序的逻辑错误,而没有具体到到底是哪一条语句错了我说的跟踪是:你在VC中打开你的服务器程序,设置好断点,按 F5进入调试模式,
    然后运行客户端程序,看看是否能得到正确结果;如果这样不行的话:在你的客户程序和服务器程序的每个关键步骤的地方将期望的返回值打印到文件
    中,据此判断错误位置。
      

  3.   

    1)如果握手不正确,可能出现把握手协议的数据当作商品数据,应该打印出来进行判断,最好加上交易码,一种比较通用的格式是以esc开头用\\结尾。
    2)在服务器端加上日志纪录每次请求的细节,如果服务器纪录正常而返回不对,很有可能是如1)所说。
    3)参考临界区的概念,设置临界区。
      

  4.   

    首先先谢谢各位的解答!
    to wanglei888(阿笨猫): 我们已经这样调试过了,但就是因为错误不出现了,所以才发愁啊! 最近几次运行程序都是调试的,但都没有错误出现~~
      

  5.   

    to 2ndboy(丢丢) : 您说的逻辑错误是指什么呢? 能不能说清楚一点儿呢? 谢谢~~
      

  6.   

    to 2ndboy(丢丢) : 您所说的逻辑错误是指什么呢? 请说详细一些,好吗? 谢谢~~~
      

  7.   

    to  jennyvenus(JennyVenus): 首先谢谢您的回答,对于您的解答:
    1. 握手不正确这一条的问题是不存在的
    2. 服务器这一条:我们是采用 TCP/IP ,只是一个应用程序,只是把程序作为 SERVER 与 CLIENT。所以,也没有记录日志
    3. 临界区的问题也应该不是,因为,如果出现错误都是在程序第一次运行的时候,不存在其他进程来争夺临界区……
      

  8.   

    to nuaazwg(潇湘浪客): 如果要找机器的不同那实在是太难了,先不说硬件,单说软件,每台机器上的软件都有不一样的,希望你能再给出一些建议,谢谢!!
      

  9.   

    to oldworm(oldworm): 谢谢你,可是如果是程序有问题的话,为什么有的机器有,有的机器没有呢? 而且,有问题的机器,第二次再用的时候就没有问题了。我们调试了这么久,只发现了两台机器有这样的问题!
      

  10.   

    如果只有第一次出现问题,并且debug很难出现问题,很可能有以下问题:1.指针初始化,debug版本是0xFFFFFFF,release是0x00000
    如果你判断是指针是否为NULL,那小心了,忘记初始化就会有问题2.用float运算却用它直接和0比较大小.
    3.内存溢出,debug版本有4字节的保护,realse没有,很容易出现debug版本没事,但realse有事
    从你的问题看,是不是初始化有问题?你的数据库采用什么?socket采用数据报还是TCP?
      

  11.   

    to gameboy999(C2Java) : 
    谢谢你的解答:
    1. 程序中没有用到指针
    2. 没用到 float 型
    3. debug 和 release 都有问题~~
    不过,还是谢谢你的回答
      

  12.   

    to rushing(勇敢的心):
    谢谢你的回答:
      两次错误不是同一个产品