本帖最后由 tangaowen 于 2010-08-10 22:32:28 编辑

解决方案 »

  1.   

    你的select不会设置一个超时值啊?
    TCP是流式的,两个包可能同时到
      

  2.   


    呵呵,我刚学网络编程,新手,不好意思
    设置一个超时值?那你的意思是超时返回我再继续select吗,直到select成功???
    那是不是我需要给每个包编个号啊,我现在是按照我接收的顺序组成一幅屏幕BMP的???
      

  3.   

    1:select设置超时值
    timeval timeout;
    timeout.tv_sec=0;
    timeout.tv_usec=200000;
    ret=::select(0,NULL,&fdSend,NULL,&timeout);
    2:确认recv(socket_client,buffer,MAX_PATH,0);没有收到两个联系的客户端的包。
      

  4.   

    如果select超时了,你接着循环select
    不用加编号,可以加个包头,包头中包含你发送包体的长度,
      

  5.   

    包头是什么,包头长度是指我每次 Send的数据的长度吗?我在开始发送了每个屏幕截图的总数据长度给了客户端的,客户端是知道每屏数据需要接收多少数据才接收完毕的
      

  6.   

    意思是如果client发送了两个包,但是是连在一起的,你的server只读取了一个发送出去了,因为你的buffer是不是能容下两个please  send  next  screen slap
      

  7.   

    按照你们说的,服务器设置超时后,发现进入 超时返回的死循环,就是select 每次返回0
    但是我的客户端是显示发送请求成功了的,为啥服务器就是select发现不了有数据可读呢?奇怪的是,我不是一开始就跑不了,是跑了一段时候后就这样了
      

  8.   

    你可以做日志,看看你的server和client是不是对称的,
      

  9.   


    应该不会的吧,我客户端如果发送请求成功了就不会发了,就会进入接收屏幕数据的循环。另外,我服务器的接收的buf是MAX_PATH  也就是260,接收两个没有问题,而且我这些都是打了LOG用cout输出的,在先前没有设置超时前,就发现是select没有返回,现在设置了超时,就是每次超时返回,然后死循环一直在等待请求,其实请求早已经在客户端发送出来了
      

  10.   


    一直都是有打日志的。这是服务器的LOG;
    收到消息:please  send  next  screen slap
    继续发送下一屏数据
    屏幕数据发送完毕
    收到消息:please  send  next  screen slap
    继续发送下一屏数据
    屏幕数据发送完毕
    收到消息:please  send  next  screen slap
    继续发送下一屏数据
    屏幕数据发送完毕
    select返回nRet=0 等待读失败
    select返回nRet=0 等待读失败
    select返回nRet=0 等待读失败
    select返回nRet=0 等待读失败
    select返回nRet=0 等待读失败
    select返回nRet=0 等待读失败
    select返回nRet=0 等待读失败
    select返回nRet=0 等待读失败
    select返回nRet=0 等待读失败
    。。
    这里一直输出这个死循环
    这是客户端的LOG:
    屏幕数据大小:4096000
    使用原先内存
    屏幕数据接收完毕
    通知server发送下一屏数据
    通知发送下一屏数据 发送成功
    屏幕数据大小:4096000
    使用原先内存
    屏幕数据接收完毕
    通知server发送下一屏数据
    通知发送下一屏数据 发送成功
     
    在这里卡住
      

  11.   

    select(0,&set_read,NULL,NULL,NULL))>
    仅仅监控read状态是不足够的,如果socket上有异常,你可能无法检测到,所以要同时监控exceptionset
      

  12.   


    额,我晚上回去传个set_error给select看看是不是有错误发生了
      

  13.   

    lijianli9我怎末跟您联系啊,呵呵
    怎末没有消息了