关于supersocker的数据传输中遇到的问题
2017-09-15 16:41
260 查看
最近在学socket,在使用socket时数据的传输与接口都是byte,所以文本与文件的传输只要对传过来的byte处理好就可以。
但是在supersocket上,我却花费了很长的时间。原因如下:
1、从客户端传来的byte都会处理成string,
在开始接触supersocket时发现对于文字的传输很方便,但是到了文件的传输时我才发现,传过来的byte都会转化为string,
这让我很是烦恼,在经过排查才发现StringRequestInfo为string接口会将传过来的byte转化为string
那如果我不要转化呢?经过网上学习发现要接收不同的接口,要自己而外的编写转化接口。
2.接口的传输与接收
接口的编写网上资料可以各自查找,经过学识后我用基于FixedHeaderReceiveFilter的接口写了一个byte的接口,
接口构造如下:
根据构造代码如下:(6=name(4)+len(2))
写好接口后我发现,数据传不进来,又一通查找发现客户端也要按照构造来传输byte如下:
0-3为传名称(可空),4-5为传输数据包的大少(必填),后面为数据包
3.在弄好接口发现当传输512以下的文件时没错,但是过了512后发现文件的传输会报错
又经过一轮查找,因为终端每次发送文件的最大缓冲区是512字节,所以每次接收也是定义为512字节,所以超过512后要分开传输,然而还是没有解决问题,
然后在逐步的调试中才发现,分成512每包后,但在发送时加上头的6个字段就超过了512的字节,所以将包分成506的字节就解决了问题了。
但是在supersocket上,我却花费了很长的时间。原因如下:
1、从客户端传来的byte都会处理成string,
在开始接触supersocket时发现对于文字的传输很方便,但是到了文件的传输时我才发现,传过来的byte都会转化为string,
这让我很是烦恼,在经过排查才发现StringRequestInfo为string接口会将传过来的byte转化为string
那如果我不要转化呢?经过网上学习发现要接收不同的接口,要自己而外的编写转化接口。
2.接口的传输与接收
接口的编写网上资料可以各自查找,经过学识后我用基于FixedHeaderReceiveFilter的接口写了一个byte的接口,
接口构造如下:
根据构造代码如下:(6=name(4)+len(2))
public ByteReceiveFilter() : base(6) { } protected override int GetBodyLengthFromHeader(byte[] header, int offset, int length) { return (int)header[offset + 4] * 256 + (int)header[offset + 5]; } protected override BinaryRequestInfo ResolveRequestInfo(ArraySegment<byte> header, byte[] bodyBuffer, int offset, int length) { return new BinaryRequestInfo(Encoding.UTF8.GetString(header.Array, header.Offset, 4), bodyBuffer.CloneRange(offset, length)); }
写好接口后我发现,数据传不进来,又一通查找发现客户端也要按照构造来传输byte如下:
byte[] buffer = Encoding.UTF8.GetBytes(msg); byte[] senddata = new byte[buffer.Length + 6]; senddata[0] = 0; senddata[1] = 0; senddata[2] = 0; senddata[3] = 0; senddata[4] = (byte)(buffer.Length / 256); senddata[5] = (byte)(buffer.Length % 256); Buffer.BlockCopy(buffer, 0, senddata, 6, buffer.Length); client.Send(byteing(buffer));
0-3为传名称(可空),4-5为传输数据包的大少(必填),后面为数据包
3.在弄好接口发现当传输512以下的文件时没错,但是过了512后发现文件的传输会报错
又经过一轮查找,因为终端每次发送文件的最大缓冲区是512字节,所以每次接收也是定义为512字节,所以超过512后要分开传输,然而还是没有解决问题,
然后在逐步的调试中才发现,分成512每包后,但在发送时加上头的6个字段就超过了512的字节,所以将包分成506的字节就解决了问题了。
相关文章推荐
- 关于supersocker的数据传输中的问题与解决
- 关于echarts在节点显示动态数据及添加提示文本所遇到的问题
- 关于表单数据的传输问题
- 关于ffmpeg解码通过UDP协议传输的视频流遇到fifosize 的问题
- 贴吧系统开发中遇到的几个问题——数据传输限制
- iOS中关于动态Tableview中的cell数据传输的多线程问题解决之拙见
- 今天在csdn上遇到一个问题,是关于sql数据行列转换的,我的写法如下:
- 关于json数据传输乱码问题
- 关于Qt5 SerialPort串口传输丢失数据问题。
- 关于JBoss7.X修改post传输数据量(max-post-size)的问题
- ajax传输json数据遇到不执行success方法也不报错的问题
- 关于遇到需要导入大量数据的问题
- 关于使用DirectShow架构,传输YUV420数据的Filter与Video Renderer Filter连接问题的解决办法。
- 关于管道的大量数据传输问题解决方法 ( vc )
- 关于使用DirectShow架构,传输YUV420数据的Filter与Video Renderer Filter连接问题的解决办法。
- 关于java socket 传输文件时遇到的问题
- 2014.4.27 android http数据传输遇到的问题
- 关于webrtc中使用DataChannelInterface进行普通数据的传输的若干问题。
- 关于Gson解析Okhttp返回的json数据遇到的问题
- 关于oracle批量插入数据遇到的问题