示例#1
0
        public FrmServer()
        {
            InitializeComponent();

            txt_IP.Text   = "127.0.0.1";
            txt_Port.Text = "60000";

            m_sockServer = new CSocketServer();
            setCallBack  = ReceiveMsg;
            //委托函数要执行什么功能?//获取服务器的客户端列表,并赋值给下拉列表框
            opCmbCallBack = OpCmbItem;
        }
示例#2
0
        /* 콤보박스로 디바이스 변경 필요시
         * 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();
            }
        }
示例#3
0
        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();
        }
示例#4
0
        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);
            }
        }