Socket通信
套接字(Socket)是网络上运行的两个程序之间双向通讯链接的一个端点,端点是端口号和IP地址结合,通过标识端点可以找到对应服务器与客户端所建立的TCP连接,以便将数据准确地发送到应用程序中。
服务器在绑定到特定端口号的套接字,就开始等待并侦听客户端是否发出连接请求,客户端根据端口号和IP地址找到特定的服务器,在标识自己身份后请求连接,在创建套接字成功后,客户端与服务器就可以开始进行通信。
如图所示:
1. 自定义要传输的数量类
序列化:把对象转换为字节序列的过程
反序列化:把字节序列转换为对象的过程
使用序列化功能,需要引进以下命名空间
using System.Runtime.Serialization.Formatters.Binary;
using System.Runtime.Serialization;
using System;
using System.Collections.Generic;
namespace MyDataSave
{
[Serializable] //表示将要序列化的类
public class DataSave
{
public List<bool> _bool;
public List<char> _char;
public List<float> _float;
public List<int> _int;
public List<string> _string;
public List<List<float>> _Vector3;
public DataSave();
//反序列化方法
public static DataSave BytesToObject(byte[] Bytes)
{
using (MemoryStream ms = new MemoryStream(Bytes))
{
IFormatter formatter = new BinaryFormatter();
return formatter.Deserialize(ms);
}
}
//序列化方法
public static byte[] ObjecToBytes(object obj)
{
//内存流(MemoryStream),使用using 自动释放关闭机制,无需再手动关闭流ms.Close();
using (MemoryStream ms = new MemoryStream())
{
//序列化工作系由特定的格式化器formatter,选择二进制格式化器BinaryFormatter
IFormatter formatter = new BinaryFormatter();
//把obj对象序列化为二进制流保存在流中
formatter.Serialize(ms, obj);
//GetBuffer 是把 stream 中的 buffer 的引用传递出来,是地址的引用传递
return ms.GetBuffer();
}
}
}
}