请教关于socket编程的send函数!(TCP)今天遇到一个问题,先send一个大文件,估计时间比较长,另一个线程在这中间想发送另外一段数据,请问直接用这个socket进行send会出现什么问题,是否会成功?

解决方案 »

  1.   

    非阻塞情况下同时发包时,如果被底层分包,且没有一个有效的头来判定分包属于哪次send的数据,接收时会混淆.
      

  2.   


    一个socket就一个系统缓冲区,同时写,数据当然会错误了
      

  3.   


    我以前好像试过,Windows好像保证了每次发送数据过程的完整性,Send和Send之间不会重叠,但是没看到相关说明,
      

  4.   

    你接收端的话可能需要做一下处理,因为你的发送端2个线程分别发送了数据包A和B,你接收端的话接收到A和B以后,需要处理一下A和B的顺序
      

  5.   

    根据线程的执行原理:
      A运行一段时间后换B运行
      B运行一段时间后再换A运行 
      这样循环下去就是一个多线程.两个线程同时操作一个大的缓冲区,有可能会造成不安全访问,产生冲突,这样数据应该会乱掉吧???试过才知道.
      

  6.   


    有道理,那我这样做应该可以:
    创建一个临界区,A中大文件自己分片循环发送,每个分片打上自己的应用头,进入临界区后再send,B中同样处理。多线程啊,好麻烦
      

  7.   


    以前是用阻塞方式做的,今天我又用非阻塞方式测试了一下,WINDOW保证了每次SEND的数据块的完整性,SEND和SEND之间是不会有数据交叉情况出现的
      

  8.   

    感觉还是要避免同时send的好,谢谢各位了,结贴