c#中利用结构体进行socket传输数据
来源:互联网 发布:淘宝好评模板100字 编辑:程序博客网 时间:2024/06/05 11:28
using System.Collections.Generic;
using System;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
using System.Reflection;
using System.Runtime.InteropServices;
public class ByteConvertHelper
{
/// <summary>
/// 将结构体对象转换为byte数组
/// </summary>
/// <param name="obj">被转换对象</param>
/// <returns>转换后byte数组</returns>
public static byte[] Object2Bytes(object obj)
{
int size = Marshal.SizeOf(obj);
byte[] bytes = new byte[1024];
IntPtr structPtr = Marshal.AllocHGlobal(size);
Marshal.StructureToPtr(obj, structPtr, false);
Marshal.Copy(structPtr, bytes, 0, size);
Marshal.FreeHGlobal(structPtr);
return bytes;
}
/// <summary>
/// 将byte数组转换成对象
/// </summary>
/// <param name="buff">被转换byte数组</param>
/// <param name="typ">转换成的类名</param>
/// <returns>转换完成后的对象</returns>
public static object Bytes2Object(byte[] buff , Type type)
{
int size = Marshal.SizeOf(type);
if(size > buff.Length)
{
return null;
}
IntPtr structPtr = Marshal.AllocHGlobal(size);
Marshal.Copy(buff, 0, structPtr, size);
object obj = Marshal.PtrToStructure(structPtr, type);
Marshal.FreeHGlobal(structPtr);
return obj;
}
}
//------------------------------------------------------------------
//下面是结构体的类定义
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Runtime.InteropServices;
namespace ChatServer
{
public enum CurrentStatus
{
Serching,
Playing,
Free,
}
public enum PlayerSide
{
Left,
Right,
}
public class PlayerData
{
[StructLayoutAttribute(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)] //必须要写,保证结构体的保存在内存中的方式
public struct PlayerStat
{
public float PositionX;
public float PositionY;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)] //必须要写,不然字符串没法解析
public string Name;
public CurrentStatus status;
public PlayerSide side;
}
}
}
- c#中利用结构体进行socket传输数据
- Socket传输结构体数据注意事项
- 利用UDP传输结构体数据 structdata over udp
- 谈Socket传输结构体
- C++ socket传输结构体
- 利用jquery进行xml数据的传输
- C#实现Socket传输简单数据
- C#实现Socket传输简单数据
- 利用OpenSSL库对Socket传输进行安全加密
- 利用不定长的结构体发送socket数据
- 利用socket传送结构体类型的数据
- 利用不定长的结构体发送socket数据
- 利用C#进行Socket通信编程之一
- 利用C#进行Socket通信编程之一
- 利用C#进行Socket通信编实例
- 利用socket传输对象
- Linux socket 传输和接受结构体
- 【转】socket不能直接传输结构体!
- iOS KVO模式
- 从源码解析computescroll()方法与invalidate()的关系
- ios中的图片大小关系
- 通过性能计数器(Process)来获取某个进程的CPU使用率、内存使用量、磁盘读写速率
- just for test
- c#中利用结构体进行socket传输数据
- 18、react之 react-redux
- MYSQL解压版安装及常用命令
- android studio生成aar包并在其他工程引用aar包
- win 下 批量修改文件名
- mysql配置文件--explicit_defaults_for_timestamp
- 03_Qt的事件传递、消息过滤器和消息通知(类与类之间通讯)
- 获取本地视频,网络视频的第一帧图片,使之显示出来
- Android之实现倒计时