关于supersocker的数据传输中的问题

最近在学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<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的字节就解决了问题了。

时间: 2024-07-30 17:44:04

关于supersocker的数据传输中的问题的相关文章

关于数据传输中加密解密那点事儿(一)

随着互联网的兴起,越来越多的信息和资源要通过网络传输完成:然而在这些数据传输中总有一些"无关人员"做一些窃听.盗取.篡改等危害数据安全的行为,所以我们要对数据进行加密处理,以保证数据的安全传输: 所以有了一下几种加密方式: 一.对称加密: 这种算法简单来说就是 数据的发送方和接收方都必须要有同一种密钥(加密数据所用到的密钥),在数据的传输中 数据与密钥都通过加密的方式传送: 特性:在数据加密中,数据被分成固定大的块,逐个加密:加密和解密速度也快: 缺陷:因为加密和解密使用同一种密钥,所

安全相关的问题、CSRF攻击、怎么确保数据传输中的安全性?

CSRF攻击 又叫“跨站请求伪造”.可以这么理解CSRF攻击:攻击者盗用了你的身份,以你的名义发送恶意请求.CSRF能够做的事情包括:以你的名义发送邮件,发消息,盗取你的账号,甚至于购买商品,虚拟货币转账......造成的问题包括:个人隐私泄露以及财产安全. 下图简单阐述了CSRF攻击的思想: 1.用户C打开浏览器,访问受信任网站A,输入用户名和密码请求登陆网站A: 2.在用户信息通过验证后,网站A产生Cookie信息并返回给浏览器,此时用户登陆网站A成功,可以正常发送请求到网站A: 3.用户未

关于数据传输中加密解密那点事儿(二)

基于上一篇,知道了数据加密中所用到的加密方式及算法,还有某些认证机构:              那么这一篇就用来实际操作,如何使用命令来完成数据的加密及解密: 首先,在操作之前,要了解到两个关于安全传输的协议即:SSL与TLS SSL:(Secure Socket Layer,安全套接字层),位于可靠的面向连接的网络层协议和应用层协议之间的一种协议层.SSL通过互相认证.使用数字签名确保完整性.使用加密确保私密性,以实现客户端和服务器之间的安全通讯.该协议由两层组成: TLS:(Transpo

Transferring Data Without Draining the Battery【数据传输中有效降低电池消耗】

阅读:http://blog.csdn.net/kesenhoo/article/details/7390519 http://developer.android.com/training/efficient-downloads/efficient-network-access.html Optimizing Downloads for Efficient Network Access 基于有效的网络访问优化下载 Minimizing the Effect of Regular Updates 

【转载】串口中怎样接收一个完整数据包的解析

这里以串口作为传输媒介,介绍下怎样来发送接收一个完整的数据包.过程涉及到封包与解包.设计一个良好的包传输机制很有利于数据传输的稳定性以及正确性.串口只是一种传输媒介,这种包机制同时也可以用于SPI,I2C的总线下的数据传输.在单片机通信系统(多机通信以及PC与单片机通信)中,是很常见的问题. 一.根据帧头帧尾或者帧长检测一个数据帧 1.帧头+数据+校验+帧尾 这是一个典型的方案,但是对帧头与帧尾在设计的时候都要注意,也就是说帧头.帧尾不能在所传输的数据域中出现,一旦出现可能就被误判.如果用中断来

FPGA中对异步信号的处理(很好)

最常用的约束有IO管脚位置约束和电平幅度约束,这个很好理解.另外,就是对时钟网络约束.这个是很重要的.比如你的系统中,驱动的电路的时钟是27M的,那么你需要在约束文件中增加类似如下的约束语句NET REF_CLK27M TNM_NET = REF_CLK27M_grp;TIMESPEC TS_REF_CLK27M = PERIOD REF_CLK27M_grp : 37ns HIGH 50 %;这样的话,工具在布线的时候,就会知道这个时钟所驱动的所有网络必须满足至少27M速度的要求,占空比为50

银行应用系统安全性设计(1):数据传输的加密方法

银行应用系统安全性设计(1):数据传输的加密方法 数据传输的加密方法 1.报文鉴别代码: 在数据传输中,为防止线路窃听和非法进入修改,引入了传输密钥和报文鉴别(MAC),以确认信息包的合法性.数据在线路上的加密是以传输密钥为基础的,前置机每天开机,自动向主机申请传输密钥,将其中一个下传到前置机,另一个存放在主机.以后数据的传输均通过这一对密钥加密.因为传输密钥的申请是随时可以重复的,也就是说传输密钥是动态的,而且每一前置机与主机之间的密钥对应是不同的,所以确保了数据在传输中的安全性和保密性.2.

串口数据传输当中的共用体和结构体转换

嵌入式系统的串口数据传输都是以字节为单位,但是有些特殊的数据类型,比如float a=231.5,在最底层是如何表示的呢?我们知道float数据类型占用4个字节,实际上在内存当中a=0x43678000,只是嵌入式芯片访问a时,知道a是浮点型数据,所以一次性读取4个字节,而且也按照浮点型的数据表示规定,将a转换为十进制的可读数据231.5.如果我们从串口接收到4个字节数据{0x43,0x67,0x80,0x00},如何把这4个字节的数据转换为float型呢?直接令float a=0x436780

SylixOS NUC970平台SPI总线数据传输

概述 本文档是对NUC970平台上的SylixOS SPI总线数据传输的详细分析. SPI总线数据传输流程 NUC970平台上SPI总线数据传输流程如图 21所示. 当一个消息准备传输时,第一步判断发送和接收缓存区是否为空,若为空,就没有要接收或发送的数据,直接返回. 第二步,判断消息长度是否大于指定的值(可以改变,但要大于16个字节),若大于,以16字节为单位传输数据,否则以单字节为单位传输数据. 图21 SPI数据传输流程图 SPI总线的消息类型 在SylixOS中,SPI总线的消息类型,如