本帖最后由 Tirangle_Function 于 2010-11-05 11:32:55 编辑

解决方案 »

  1.   

    我没问通信规范的问题。我只是问tcp通信的问题,请别说这些没用的好不。
      

  2.   

    我也遇到同样问题,发5个有时候很快全收到,有时候收到2~5,有时候干脆啥都收不到,感觉tcp不像它标称的那么可靠啊
    实验环境是公用的wifi,如果是自建局域网的话必定是百发百到。
    比较靠谱的解决方法似乎是:收到一个就返回一个回执,然后发第二个,不收到回执继续发第一个...
      

  3.   

    一样的问题,我一直在怀疑是不是代码有问题。但是经过有时候会有返回包回来,有时候没有。我是在本机使用华为模拟器测试的。实在是有些郁闷。没有收到回执,但是模拟器上已经收到了我的彩信了。所以我的策略是取出一条就发送一条,如果收不到就跳过。继续发下一条,下次从数据库取的时候,之前发了但是没有发送成功的就是高优先级排在发送队列了。如果有回来的包,读出这个包并且触发这个事件
     if (onStreamEvent != null)
     {
          StreamEventArgs args = new StreamEventArgs(stream);
          onStreamEvent(this, args);
     }加入接收队列里面,进行解包更新到数据库。主要还是想问各位是否我的通信部分读取数据出问题了
      

  4.   

    对于TCP,接收数据时一定要安装对方发数据封包格式来读取(边读边解析),而不能心急一下子把数据读完再解析。因为TCP是流式传输,接收的数据的大小和发送方方式无关,即发送方一次发送1K数据,但是不能保证接收方也能一次性接收到这1K。TCP需要自己定义封包的边界。比如你说的这个彩信协议,假如其有一个20字节的Header,然后是body,那就要先读取20字节, 把header解析了,然后在根据header中的bodyLength读取body数据,这样就不会阻塞了。
      

  5.   

    楼主,能不能把彩信的协议也给我发一份啊,我对这个也很感兴趣!
    邮箱:[email protected]
      

  6.   

    9楼说的可能是这个理。不过TCP短连接的,我确实没接触过。保持长连接还有一些经验可循。关键是我不断开服务端会自己踢掉这边的连接。我先试一下,看看是否可行。谢谢了!
      

  7.   

    虽然没有满意答案,还是结贴吧。本来是用socket实现http短连接的,找其他方法看看。