本帖最后由 XXP_KING_VB 于 2014-08-10 03:23:15 编辑

解决方案 »

  1.   

    视频应该跟控制使用不同的通道传送。例如可以采用UDP方式(而不是TCP),把数据分成不超过60K的多个消息块,每一个消息的最开始的12个自己可以是你的“消息ID号、总块数、块号”,然后才是数据。你使用的TCP应该是短连接。短连接的TCP通讯相当慢,每一次都需要重复握手操作。你所谓的“接收端接收到的GetStream数据长度是40000左右”这个不实。你不是多次Read而得到完整的帧吗?你那个只是第一次Read时缓冲区里已经准备好的数据大小,它不是你要去设置的,你应该设置好Buffer的大小,例如300K大小,然后第一次Read时取到40K还是10K或者90K或者500各字节,那都是底层优化控制的,你只要能够多次调用Read而取到数据就行了。多次读取到的数据应该保存在一起,然后当你读取到消息结束时才把累积的数据拿出来一次性进行处理。你所谓的“强壮性要做很多工作”这是因为你根本没有正确的处理逻辑。消息中的信令格式,你应该自己设计。别人不会给你设计。比如如何表达各种数据字段,如何区分消息结束,等等。不知道设计信令格式协议,那么你所能传送的数据顶多只是一个傻瓜类型的数据,根本不知道如何传送多个字段数据。Socket是一个比较宽泛的词儿,有十几种常见的通讯方式都可以说成是Socket,包括Http的各种子协议通讯也是Socket。所以一般我们只跟外行说什么“Socket”。如果你使用TcpClient/TcpListener,那么你就这么说。如果你使用UdpClient,那么你就那么说。这个时候只有具体化,才能有新的想法。只说“Socket”不会有什么具体内容。
      

  2.   

    每一个消息的最开始的12个自己   -->    每一个消息的最开始的12个字节
    除了为单独的命令另开端口使用UDP通讯以外,你还可以使用TCP长连接(而不是短链接),并且在长连接时全面支持异步并行收发数据,等等。这都可以大大提高通讯效率。
      

  3.   

    做过一个简单的TCP/IP类项目,主要是按对方规定的格式将数据发给对方就可。