none
Socket流方式传输数据,如何区分分界线? RRS feed

  • 问题

  • 使用TcpListener和传输数据,数据有可能是一个图片的序列化二进制,也有可能是一些自定义指令或文本,

    那么在传输的时候如何区分流中过去的数据是图片或文本,如何做一个分界线,因为接收端可能接受到图片和文本都在stream中,我有可能读取图片的时候,超过“界限”把后面的文本也读取出来了,

    如何处理??

    2013年11月8日 6:31

答案

  • 你好:

    通过Socket发送的消息的边界是通过自定义的方式来实现的,就像你说的可以增加一位标识图片还是文本,也可以再添加几位表示字节长度,也有其他的实现方法。这里有一篇文章供你参考:解决TCP的无消息边界问题


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    • 已标记为答案 jesse hao 2013年11月15日 11:07
    2013年11月12日 10:01
    版主

全部回复

  • 你可以自定义一个类,该类包含了Image和文字(String)类型。您完全可以把这个类作为对象(二进制序列化对象)进行传输。然后分别判断Image是否为空即可。

    For Account Validation, please follow "Verify Account+Number" at http://social.msdn.microsoft.com/Forums/en-us/home?forum=reportabug

    For ASP.NET Question, please ask at http://forums.asp.net

    For other questions, you can find a specific forum and then ask at http://stackexchange.com/sites

    Click and Donate at http://www.freerice.com

    2013年11月9日 11:49
    版主
  • 你好:

    可以在发送数据的时候添加消息头,添加区分图片还是文本的标识位,在接收方解析消息头之后解析标识位。


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    2013年11月11日 4:17
    版主
  • 你好,图片的二进制字节长度也要加在头信息里吗?

    否则我怎么知道一个图片要读取多少byte?

    目前我的做法是:

    第一个字节表示是图片,还是文本(0代表图片,1代表文本,2,3代表..........)

    第二到第五共4个字节存储一个整形(一个Int类型占4个字节),表示后面图片或文本的字节长度,

    这是我自定义的,这样可以吗?我想知道一般的程序中socket是怎么解决的?

    主要问题是:我怎么知道后面的数据是什么?就算是图片,我怎么知道要读取多少字节算完毕?

    2013年11月12日 4:49
  • 你好,

    那么这个类序列化后,接收端如何知道这个类占多少字节?该读取多少字节算是一个类结束了?

    发送端可能发送了好几个类了,接收端可能一次接受到多个对象,

    2013年11月12日 4:51
  • 你好:

    通过Socket发送的消息的边界是通过自定义的方式来实现的,就像你说的可以增加一位标识图片还是文本,也可以再添加几位表示字节长度,也有其他的实现方法。这里有一篇文章供你参考:解决TCP的无消息边界问题


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    • 已标记为答案 jesse hao 2013年11月15日 11:07
    2013年11月12日 10:01
    版主
  • 原来我用的方法是自定义数据结构。

    如第一个byte表示传输内容类型,是纯文本、数字、图像、某某类等;

    第二个byte开始表示消息长度(使用UTF-8编码,并保证任意部分的长度固定)

    这样的好处是灵活性强,自己控制,传输任意类型,缺点也很明显,复杂


    不重要的其实最重要

    2013年11月14日 9:12