private void button1_Click(object sender, EventArgs e) { // 广播数据,此处其实也可以对指定的客户端进行广播数据,需要知道AppSession对象,通常的做法的建立一个房间号引擎, // 缓存登录到该房间号的AppSession对象,这样就可以实现针对这个房间号的客户端进行广播数据了。 // Broadcast data, in fact, broadcast data can also be specified for the specified client, you need to know the AppSession object, // the usual practice to create a room number engine, cache the AppSession object logged in to the room number, // so that you can achieve this room number The client broadcasts data. // 数据发送 NetHandle handle = new NetHandle( ); if (textBox5.Text.IndexOf('.') >= 0) { string[] values = textBox5.Text.Split('.'); handle = new NetHandle(byte.Parse(values[0]), byte.Parse(values[1]), ushort.Parse(values[2])); } else { handle = int.Parse(textBox5.Text); } complexServer.SendAllClients(handle, textBox4.Text); }
private void ThreadBackgroundReadPlc( ) { // 此处假设我们读取的是西门子PLC的数据,其实三菱的数据读取原理是一样的,可以仿照西门子的开发 /************************************************************************************************** * * 假设一:M100,M101存储了一个温度值,举例,100.5℃数据为1005 * 假设二:M102存储了设备启停信号,0为停止,1为启动 * 假设三:M103-M106存储了一个产量值,举例:12345678 * **************************************************************************************************/ while (true) { if (isReadingPlc) { // 这里仅仅演示了西门子的数据读取 // 事实上你也可以改成三菱的,无非解析数据的方式不一致而已,其他数据推送代码都是一样的 HslCommunication.OperateResult <byte[]> read = siemensTcpNet.ReadFromPLC("M100", 7); if (read.IsSuccess) { failed = 0; // 读取失败次数清空 netComplex.SendAllClients(1, read.Content); // 群发所有客户端 ShowReadContent(read.Content); // 在主界面进行显示,此处仅仅是测试,实际项目中不建议在服务端显示数据信息 } else { failed++; ShowFailedMessage(failed); // 显示出来读取失败的情况 } } System.Threading.Thread.Sleep(500); // 两次读取的时间间隔 } }
private void ComplexServer_AcceptString(AsyncStateOne object1, NetHandle object2, string object3) { // 我们规定 // 1 是系统消息, // 2 是用户发送的消息 // 3 客户端在线信息 // 4 强制客户端下线 // 当你的消息头种类很多以后,可以在一个统一的类中心进行规定 if (object2 == 2) { // 来自客户端的消息,就只有这么一种情况 NetMessage msg = new NetMessage() { FromName = object1.LoginAlias, Time = DateTime.Now, Type = "string", Content = object3, }; // 群发出去 complexServer.SendAllClients(2, JObject.FromObject(msg).ToString()); } }