public FrmServer() { InitializeComponent(); txt_IP.Text = "127.0.0.1"; txt_Port.Text = "60000"; m_sockServer = new CSocketServer(); setCallBack = ReceiveMsg; //委托函数要执行什么功能?//获取服务器的客户端列表,并赋值给下拉列表框 opCmbCallBack = OpCmbItem; }
/* 콤보박스로 디바이스 변경 필요시 * private void CB_SelectedIndexChanged(object sender, EventArgs e) * { * lock (obj) * { * * Device_Def.Device = CB.SelectedItem.ToString(); * } * } */ private void BtServer_Click(object sender, EventArgs e) { if (BtSrv.Text == "Server") { try { IP = txtIP.Text; UI_set.Connection_Live = true; server = new CSocketServer(); PL = new PLCManager(); Thread t = new Thread(new ParameterizedThreadStart(PL.SocketInit)); Thread gr = new Thread(RefreshDisplayPLCData_Except_AddressColumn); if (!int.TryParse(txtPort.Text, out Port)) { MessageBox.Show("유효한 포트번호가 아닙니다."); } state = 1; PL.SocketLive = true; Control_Change(state); t.IsBackground = true; t.Start(IP); gr.Start(); } catch (Exception ev) { MessageBox.Show(ev.Message); } } else if (BtSrv.Text == "Server On") { Thread t = new Thread(new ParameterizedThreadStart(PL.SocketInit)); Thread gr = new Thread(RefreshDisplayPLCData_Except_AddressColumn); BtSrv.Text = "Server"; state = 0; server.CloseSockets(); txtPort.Enabled = true; txtIP.Enabled = true; MainForm.Text = "Waiting"; BtSrv.BackColor = SystemColors.Control; BtClient.Enabled = true; dataReset(); t.Abort(); gr.Abort(); PL.SocketLive = false; Gridreset(); } }
public void ServerAction(object arg) { string[] fullText = Convert.ToString(arg).Split('/'); string ip = fullText[0]; int portno = Convert.ToInt32(fullText[1]); int id = int.Parse(fullText[2]); int index = -1; CSocketServer server = new CSocketServer(); bool x = server.StartListen(ip, portno); // 서버.대기시작(포트번호) if (x == false) { MessageBox.Show(portno.ToString() + " 통신 Port를 확인하세요"); Environment.Exit(1); } while (SocketLive && PLCName != null) { Thread.Sleep(1); CDataObject data = server.GetReceiveData(); //0번 배열 길이 for (int i = 0; i < SocketConnect.GetLength(0); i++) { if (SocketConnect[i, 0] == portno) { index = i; if (server.m_workerSocket[0] != null && SocketConnect[index, 0] != 0) { if (index != -1 && server.m_workerSocket[0].Connected) { SocketConnect[index, 1] = 1; } else { SocketConnect[index, 1] = 0; } } break; } } if (data != null) // 서버에서, 수신 데이터가 Null이 아니면 { PLCMethod(server, data); } } server.CloseSockets(); }
private void PLCMethod(CSocketServer server, CDataObject data) { if (data.Count >= 21) { if (data.m_Data[0] == 0x50 && data.m_Data[1] == 0x00 && data.m_Data[2] == 0x00 && data.m_Data[3] == 0xFF && data.m_Data[4] == 0xFF && data.m_Data[5] == 0x03 && (data.m_Data[9] == 0x04 || data.m_Data[9] == 0x08 || data.m_Data[9] == 0x10 || data.m_Data[9] == 0x0A) && data.m_Data[11] == 0x01) { if (data.m_Data[12] == 0x14) // write frame { int size = ex.GetByteToInt(data.m_Data, 19, 2); int startaddress = ex.GetByteToInt(data.m_Data, 15, 3); if (data.Count == 21 + size * 2) { if (size < 2000) { if (data.m_Data[18] == Device_Def.DEVICE_CODE_D) { Byte[] writedata = new Byte[size * 2]; Array.Copy(data.m_Data, 21, writedata, 0, writedata.Length); WriteForByte(Device_Def.DEVICE_CODE_D, startaddress, writedata); server.BroadCastingMsg(GetWrtieOKFrame(data)); } else if (data.m_Data[18] == Device_Def.DEVICE_CODE_R) { Byte[] writedata = new Byte[size * 2]; Array.Copy(data.m_Data, 21, writedata, 0, writedata.Length); WriteForByte(Device_Def.DEVICE_CODE_R, startaddress, writedata); server.BroadCastingMsg(GetWrtieOKFrame(data)); } else if (data.m_Data[18] == Device_Def.DEVICE_CODE_W) { Byte[] writedata = new Byte[size * 2]; Array.Copy(data.m_Data, 21, writedata, 0, writedata.Length); WriteForByte(Device_Def.DEVICE_CODE_W, startaddress, writedata); server.BroadCastingMsg(GetWrtieOKFrame(data)); } else if (data.m_Data[18] == Device_Def.DEVICE_CODE_ZR) { Byte[] writedata = new Byte[size * 2]; Array.Copy(data.m_Data, 21, writedata, 0, writedata.Length); WriteForByte(Device_Def.DEVICE_CODE_ZR, startaddress, writedata); server.BroadCastingMsg(GetWrtieOKFrame(data)); } else { server.BroadCastingMsg(GetErrorFrame(1001)); } } else { server.BroadCastingMsg(GetErrorFrame(1011)); } } else { server.BroadCastingMsg(GetErrorFrame(1002)); } } else if (data.m_Data[12] == 0x04) // read frame { if (data.Count == 21) { int size = ex.GetByteToInt(data.m_Data, 19, 2); int startaddress = ex.GetByteToInt(data.m_Data, 15, 3); if (size <= 2000) { if (data.m_Data[18] == Device_Def.DEVICE_CODE_D) { Byte[] readdata = ReadForByte(Device_Def.DEVICE_CODE_D, startaddress, size); server.BroadCastingMsg(GetReadOKFrame(data, readdata)); } else if (data.m_Data[18] == Device_Def.DEVICE_CODE_R) { Byte[] readdata = ReadForByte(Device_Def.DEVICE_CODE_R, startaddress, size); server.BroadCastingMsg(GetReadOKFrame(data, readdata)); } else if (data.m_Data[18] == Device_Def.DEVICE_CODE_W) { Byte[] readdata = ReadForByte(Device_Def.DEVICE_CODE_W, startaddress, size); server.BroadCastingMsg(GetReadOKFrame(data, readdata)); } else if (data.m_Data[18] == Device_Def.DEVICE_CODE_ZR) { Byte[] readdata = ReadForByte(Device_Def.DEVICE_CODE_ZR, startaddress, size); server.BroadCastingMsg(GetReadOKFrame(data, readdata)); } else { server.BroadCastingMsg(GetErrorFrame(1003)); } } else { server.BroadCastingMsg(GetErrorFrame(1013)); } } else { server.BroadCastingMsg(GetErrorFrame(1004)); } } else { server.BroadCastingMsg(GetErrorFrame(1005)); Thread.Sleep(200); } } else { server.BroadCastingMsg(GetErrorFrame(1006)); } } else { server.BroadCastingMsg(GetErrorFrame(1007)); Thread.Sleep(15); } }