void DataOn(byte[] data, UserManager e) { //建立一个读取数据包的类 参数是数据包 //这个类的功能很强大,可以读取数据包的数据,并可以把你发送过来的对象数据,转换对象引用 ReadBytesV2 read = new ReadBytesV2(data); int lengt; //数据包长度,用于验证数据包的完整性 int cmd; //数据包命令类型 //注意这里一定要这样子写,这样子可以保证所有你要度的数据是完整的,如果读不出来 Raed方法会返回FALSE,从而避免了错误的数据导致崩溃 if (read.ReadInt32(out lengt) && read.Length == lengt && read.ReadInt32(out cmd)) { //read.Read系列函数是不会产生异常的 PACKTYPE cmdType = (PACKTYPE)cmd; //根据命令读取数据包 switch (cmdType) { case PACKTYPE.Data: { DATA tmp; if (read.ReadObject <DATA>(out tmp)) { LogOut(e.UserName + "数据命令:" + tmp.CMD); switch (tmp.CMD) { case "GET": { DATARES _var1 = new DATARES() { Type = 1, Res = new List <string>() }; _var1.Res.Add("数据1"); _var1.Res.Add("数据2"); _var1.Res.Add("数据3"); _var1.Res.Add("数据4"); _var1.Res.Add("数据5"); server.SendData(e.Asyn.AcceptSocket, BufferFormatV2.FormatFCA(_var1)); } break; } } } break; } } }
private void button2_Click(object sender, EventArgs e) { DATARES _var1 = new DATARES() { Type = 1, Res = new List <string>() }; _var1.Res.Add("群发......"); foreach (var p in userlist) { server.SendData(p.Asyn.AcceptSocket, BufferFormatV2.FormatFCA(_var1)); } }
void client_DataOn(byte[] Data) { ReadBytesV2 read = new ReadBytesV2(Data); int length; int cmd; if (read.ReadInt32(out length) && read.ReadInt32(out cmd) && length == read.Length) { PACKTYPE cmds = (PACKTYPE)cmd; switch (cmds) { case PACKTYPE.DataRes: DATARES dox; if (read.ReadObject <DATARES>(out dox)) //获取服务器发送过来的 DATASET { if (dox != null) { this.BeginInvoke(new EventHandler((o, x) => { DATARES nn = o as DATARES; if (nn != null) { switch (nn.Type) { case 1: { foreach (string p in nn.Res) { this.richTextBox1.AppendText(p + "\r\n"); } } break; } } }), dox); } } break; } } }