最近在学socket,在使用socket时数据的传输与接口都是byte,所以文本与文件的传输只要对传过来的byte处理好就可以。

但是在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 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的字节就解决了问题了。

supersocket缓冲区_关于supersocker的数据传输中遇到的问题相关推荐

  1. supersocket缓冲区_使用Socket从Client传输文件到Server对文件缓冲区大小有限制么?...

    Client端代码: public class Client implements Runnable { private String ip;// 连接IP private int port;// 连 ...

  2. php mate,textmate 命令行_使用PHP在TextMate中创建命令

    textmate 命令行_使用PHP在TextMate中创建命令 textmate 命令行_使用PHP在TextMate中创建命令 textmate 命令行 TextMate is the best ...

  3. 学习笔记_关于switch在whlie中无限循环的解决办法_C语言

    学习笔记_关于switch在whlie中无限循环的解决办法_C语言 今天在做作业的时候突然发现一个问题 #include<stdio.h> int main() {int a;while( ...

  4. 如何提取edit control中输入的数据_如何在Power Query中提取数据——列表篇(1)

    表名为列表,第一步骤名称为源 (一)从头开始提取 1. 获取列表第一个 List.First(list as list, optionaldefaultValue as any)as any 返回列表 ...

  5. 系统管理模块_部门管理_设计(映射)本模块中的所有实体并总结设计实体的技巧_懒加载异常问题_树状结构...

    系统管理模块_部门管理_设计本模块中的所有实体并总结设计实体的技巧 设计实体流程 1,有几个实体? 一般是一组增删改查对应一个实体. 2,实体之间有什么关系? 一般是页面引用了其他的实体时,就表示与这 ...

  6. mysql job_MySQL数据传输中dtle 之 job 实现简析-爱可生

    原标题:MySQL数据传输中dtle 之 job 实现简析-爱可生 作者:吕海龙 爱可生 DTLE 团队成员,负责 DTLE 开发 ,日常问题处理以及相关问题的排查. 本文来源:原创投稿 *爱可生开源 ...

  7. ux设计中的各种地图_如何在UX设计中使用颜色

    ux设计中的各种地图 Color is the mother tongue of the subconscious. 颜色是潜意识的母语. - Carl Jung -荣格 Color has more ...

  8. 探索性数据分析入门_入门指南:R中的探索性数据分析

    探索性数据分析入门 When I started on my journey to learn data science, I read through multiple articles that ...

  9. 基于边缘计算的实时绩效_基于绩效的营销中的三大错误

    基于边缘计算的实时绩效 We've gone through 20% of the 21st century. It's safe to say digitalization isn't a new ...

最新文章

  1. python3 多线程_图解|为什么 Python 多线程无法利用多核
  2. java获取下一季末_java取当前周期、月初至月末、季度初至季度末日期。
  3. linux oraclerman自动备份,Linux平台下的Oracle自动备份案例(使用RMAN)
  4. 4.12Python数据处理篇之Matplotlib系列(十二)---绘图风格的介绍
  5. python安装cv2模块_pythonimportcv2importError:DLLloadfailed:找不到指定模块
  6. devserver配置_vue.config.js的配置
  7. 基于序贯重要性重采样的粒子滤波and(RBPF)
  8. SpringBoot 2 快速整合 | Hibernate Validator 数据校验
  9. stm32实验报告心得体会_STM32实验报告
  10. 接入微信分享过程的喜和泪
  11. 100套高质量的免费 PSD 界面设计素材【系列一】
  12. visual studio 容器工具首次加载太慢 vsdbg\vs2017u5 exists, deleting 的解决方案
  13. Scrapy 1.4 文档 02 安装指南
  14. python not_刚接触Python,python中not in怎么解释?求解释一下?
  15. iOS系统下常用的三方应用URL Scheme值
  16. 捕获数据包(Wireshark)
  17. FMRI及NMR简介
  18. 7 进度指示器(LinearProgressIndicator、CircularProgressIndicator)
  19. Vue install 失败的一些解决办法
  20. 镜头矫正 棋盘矫正_矫正强迫,而不是症状

热门文章

  1. ajax提交表单序列化(serialize())数据
  2. SharePoint 2010遍历文档库中所有的文件,文件夹
  3. Ubuntu18.04忘记密码解决
  4. Linux之fd与dup2复制fd用法
  5. Android常见音频通路(十四)
  6. Ubuntu18.04编译Android源码openssl版本过高
  7. Android Camera数据流分析全程记录(overlay方式二)
  8. Android BlueDroid(三):BlueDroid蓝牙开启过程enable
  9. mysql之desc 与asc
  10. 视频编解码(十三):list_for_each_entry列表总结