C# Socket流数据大小端读写封装
2024-09-04 02:41:17
网络数据是大端模式,而c#中的数据小端结构,那么在读写网络数据的时候需要进行转换。c#类库IPAddress已经封装了大小端的转换。
封装代码如下:
- using System.IO;
- using System.Net;
- using System;
- namespace Framework
- {
- public class NetStream
- {
- private MemoryStream stream;
- private BinaryReader reader;
- private BinaryWriter writer;
- public NetStream(byte[] buffer = null)
- {
- if (buffer == null)
- {
- this.stream = new MemoryStream();
- }
- else
- {
- this.stream = new MemoryStream(buffer);
- }
- this.reader = new BinaryReader(this.stream);
- this.writer = new BinaryWriter(this.stream);
- }
- public void Close()
- {
- this.stream.Close();
- this.reader.Close();
- this.writer.Close();
- }
- public long ReadInt64()
- {
- return IPAddress.HostToNetworkOrder(this.reader.ReadInt64());
- }
- public int ReadInt32()
- {
- return IPAddress.HostToNetworkOrder(this.reader.ReadInt32());
- }
- public int ReadInt16()
- {
- return IPAddress.HostToNetworkOrder(this.reader.ReadInt16());
- }
- public byte ReadByte()
- {
- return this.reader.ReadByte();
- }
- public string ReadString8()
- {
- return System.Text.Encoding.UTF8.GetString
- (
- this.reader.ReadBytes(ReadByte())
- );
- }
- public string ReadString16()
- {
- return System.Text.Encoding.UTF8.GetString
- (
- this.reader.ReadBytes(ReadInt16())
- );
- }
- public long Seek(long offset)
- {
- return this.stream.Seek(offset, SeekOrigin.Begin);
- }
- // -------------------------------------------------------------------------------
- public void WriteByte(byte value)
- {
- this.writer.Write(value);
- }
- public void WriteInt16(short value)
- {
- this.writer.Write
- (
- BitConverter.GetBytes
- (
- IPAddress.HostToNetworkOrder(value)
- )
- );
- }
- public void WriteInt32(int value)
- {
- this.writer.Write
- (
- BitConverter.GetBytes
- (
- IPAddress.HostToNetworkOrder(value)
- )
- );
- }
- public void WriteInt64(long value)
- {
- this.writer.Write
- (
- BitConverter.GetBytes
- (
- IPAddress.HostToNetworkOrder(value)
- )
- );
- }
- public void WriteString8(string value)
- {
- WriteByte
- (
- (byte) value.Length
- );
- this.writer.Write
- (
- System.Text.Encoding.UTF8.GetBytes(value)
- );
- }
- public void WriteString16(string value)
- {
- WriteInt16
- (
- (short) value.Length
- );
- this.writer.Write
- (
- System.Text.Encoding.UTF8.GetBytes(value)
- );
- }
- public byte[] GetBuffer()
- {
- return this.stream.ToArray();
- }
- public int GetLength()
- {
- return (int) this.stream.Length;
- }
- }
- }
最新文章
- JSX语法简介
- java 启动 shell脚本
- Eratosthenes筛选法构造1-n 素数表
- windows环境下,如何启动chromedriver
- wflag
- VS2008注册码
- SQL SERVER 中 GO 的用法2
- wpf viewmodel之间的通信
- Delphi SysErrorMessage 函数和系统错误信息表
- SecureCRT退出全屏方法
- LNA
- Go基础(1)
- 总结:BGP和静态路由并存,达到故障自动倒换的目的。
- 用kali执行arp攻击-----------使对方断网
- 【LeetCode】163. Missing Range
- 使用scrollTop返回顶部
- python的数字图像处理学习(2)
- Jquery 获取屏幕及滑块及元素的高度及距离
- 轻量级IOC框架:Ninject (上)
- 【Centos】【Python】【Flask】阿里云上部署一个 flask 项目
热门文章
- 用python打造简单的cms识别
- Python学习day43-数据库(多表关系)
- python 之 字符串处理
- C++和C#之间的数据类型对应关系
- 玩转大数据之Apache Pig如何与Apache Lucene集成
- C++面向对象高级编程(下)第二周-Geekband
- 构建工具Bazel入门
- 深喉起底APP线下预装市场,如何一夜间拥有千万用户
- MySQL数据库_索引_事务_优化 _锁_存储引擎_存储过程_CAP
- 解决hive无法传参问题思路