本帖最后由 VisualEleven 于 2011-03-28 10:55:07 编辑

解决方案 »

  1.   

    if (i%2)
    这是怎么回事,
    i都没有变化的啊
    send(hSocket,"523",1,0);
    发送的字节数也不对啊
    所以最后流计算就有问题了
      

  2.   

    两端的recv缓冲扩大
    char szRecvBuf[40960];
    recv(hSocket, szRecvBuf, sizeof(szRecvBuf), 0);
    再试试
      

  3.   

    判断下send的返回值,还有就是一次发送的包最好就是小一点,如256,
    用setsockopt设置SO_RCVBUF,SO_SNDBUF发送缓冲区和接收缓冲区的大小为64*1024
      

  4.   

    你发送的数据包有的比较小,只有1字节,它们在tcp栈组合时,会被合并掉一部分,而且在recv时也可能读到长短不一的数据,所以不是你send了多少次,对方就会recv多少次
      

  5.   

    建议把recv和send分到二个线程处理。需要recv时从自己的recv专用线程保存的缓冲里再读出来。需要send时放给自己的send专用线程
      

  6.   


    好的,星期一我在试试,不过之前我尝试把recv端调到2kb的数组大小,问题依旧。
      

  7.   


    不是你看我代码,一个send对应一个recv,不会出现粘包情况的
      

  8.   

    Client里在进入while前多了一个send。看看是不是这个问题。
      

  9.   

    还在纠结c/s收发文件啊.看我的资源里的
    http://download.csdn.net/source/719443socket select io模型传文件 
    使用socket select io模型传文件,3K一包.保证数据绝对唯一我初学socket时的作品、。无bug
      

  10.   

    目前情况是这样:1.在发到第几个包,也就是默认缓冲区8k多的时候,我暂停下,再发就没有问题。2、在client抓包,显示系统一直在重发数据包。正如之前我说server一直受到client的回应请求一样。
      

  11.   

    10054: An existing connection was forcibly closed by the remote host. 你的客户端关闭了连接了
      

  12.   

    既然问题可能出在操作系统本身
    那么有条件的话在linux下试试
      

  13.   

    多半是recv阻塞了吧不是每次send之后 服务器都会给你一个应答,所有同意楼楼上的 吧recv和send分开。
    还有 最好setsockopt设置接收时限,多长时间没反应就返回。。具体怎么设置 自己查查吧(新手 忘记了)
      

  14.   

    估计是tcp 粘包的问题, 发送和接受 定义个协议 就应该没问题了
      

  15.   

    当发送方连续发送的若干包数据长度之和小于1500b时,常会出现粘包现象,接收方经预处理线程处理后能正确解开粘在一起的包。若程序中设置了“发送不延迟”:(setsockopt (socket_name,ipproto_tcp,tcp_nodelay,(char *) &on,sizeof on) ,其中on=1),则不存在粘包现象。