1.项目需要引用NetworkCommsDotNet.dll(NetworkComms.Net通讯框架),如果要序列号还需要引入protobuf- net.dll(NetworkCommsDotNet提供多种序列化方式,这个最常用)
2.
A aaa = null;
public List<ConnectionInfo> connectionInfos;
public List<ConnectionListenerBase> connectionListenerBases;
private void button1_Click(object sender, EventArgs e)
{
//IP地址和端口
IPEndPoint thePoint = new IPEndPoint(IPAddress.Parse(textBox1.Text), int.Parse(textBox2.Text));
//开始监听此IP和端口 使用TCP协议
connectionListenerBases = Connection.StartListening(ConnectionType.TCP, thePoint);
//关联消息类型为GetName的消息的处理方法
NetworkComms.AppendGlobalIncomingPacketHandler<string>("GetName", IncomingMsgHandle);
button1.Text = "已经开始监听";
}
private void IncomingMsgHandle(PacketHeader header, Connection connection, string msg)
{
aaa = new A();
connection.SendObject("ResName", aaa);
}
此处是服务端的监听和时间消息处理。
获取到客户端传过来的“GetName”给客户端返回一个“ResName”的对象类型
客户端步骤:创建IPEndPoint对象------监听IPEndPoint--------消息处理
注:StartListening是一个静态方法,是为监听列表添加一个监听地址,也就是说,可以写个列表添加多个监听。因为是静态没有实例化,所以想获取当前服务器的连接ip信息的话,需要用NetworkComms类的AllConnectionInfo()方法
信息处理,请参考:https://blog.csdn.net/networkcomms/article/details/44218217
3.传输类的时候序列化的语法为(需要导入protobuf- net.dll)
[ProtoContract]
public class A
{
public A()
{
Age = Guid.NewGuid().ToString();
Name = Guid.NewGuid().ToString();
DT = DateTime.Now.Millisecond;
}
[ProtoMember(1)]
public string Age { get; private set; }
[ProtoMember(2)]
public string Name { get; private set; }
[ProtoMember(3)]
public int DT { get; private set; }
}
4.客户端连接服务器(客户端的ip是本机ip,端口没设置的情况下是随机分配的(一般随机分配就好))
//连接信息类
public ConnectionInfo connnectionInfo = null;
//连接类
Connection connection;
connnectionInfo = new ConnectionInfo(Ip,端口));
//如果不成功,会弹出异常信息
connection = TCPConnection.GetConnection(connnectionInfo);
客户端消息处理:
A resMsg = connection.SendReceiveObject<string, A>("GetName", "ResName", 5000, "111");
"GetName"发送的数据名
"ResName"接收的数据名
5000, 超时时间(毫秒)
"111"发送的数据