public bool Connect(string IP, string Port) { // 初始化map initMap(); try { //定义一个套字节监听 包含3个参数(IP4寻址协议,流式连接,TCP协议) socketClient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); IPAddress ipaddress = IPAddress.Parse(IP); //将获取的ip地址和端口号绑定到网络节点endpoint上 IPEndPoint endpoint = new IPEndPoint(ipaddress, int.Parse(Port)); //注意: 这里是客服端套接字连接到Connect网络节点 不是Bind socketClient.Connect(endpoint); //new一个新线程 调用下面的接受服务端发来信息的方法RecMsg threadClient = new Thread(RecMsg); //将窗体线程设置为与后台同步 threadClient.IsBackground = true; //启动线程 threadClient.Start(); interfaceUpdataHandle = new HandleInterfaceUpdataDelegate(SetDevState); lj = true; // 链接成功 return(true); } catch (Exception err) { lj = false; // 链接失败 return(false); //MessageBox.Show(err.Message, "提示", MessageBoxButtons.OK, MessageBoxIcon.Error); } }
private void Window_Loaded(object sender, RoutedEventArgs e) { setOrgComb(); //初始化秤属性 scoket.InitializationWebScoket(); //初始化scoket interfaceUpdataHandle = new HandleInterfaceUpdataDelegate(UpdateTextBox); //实例化委托对象 scoket.OnReceive += ReceiveMsg; scoket.OnConnect += ScoketConnect; OpenSerialPort(); //打开电子秤 //serialPort1.DataReceived += new SerialDataReceivedEventHandler(serialPort1_DataReceived); //thread = new Thread(Read);//多线程去读 //thread.Start(); TimeResult = new System.Threading.Timer(new TimerCallback(MyDelegate)); //时间控件去读 TimeResult.Change(0, 500); }
/// <summary> /// 打开串口 /// </summary> /// <returns></returns> private bool OpenCom() { bool flag = true; try { if ((LCRManchine.EquipmentType == "4980") || (LCRManchine.EquipmentType == "E4982A") || (LCRManchine.EquipmentType == "E34420A")) { flag = LCR.OpenPowerSupplyGPIB(LCRManchine.AgilentAddress); } else { //if (this.serialPort1.IsOpen) //{ // this.serialPort1.Stop(); //} StringBuilder temp = new StringBuilder(10000); this.serialPort1.PortName = LCRManchine.PortName; this.serialPort1.BaudRate = LCRManchine.Baudbits; this.serialPort1.DataBits = LCRManchine.DataBits; this.serialPort1.StopBits = (System.IO.Ports.StopBits)LCRManchine.StopBits; this.serialPort1.Parity = (System.IO.Ports.Parity)Enum.Parse(typeof(System.IO.Ports.Parity), LCRManchine.Parity); this.serialPort1.DtrEnable = LCRManchine.DTR; //this.serialPort1.DataReceived += new System.IO.Ports.SerialDataReceivedEventHandler(Serial_DataReceived); //this.serialPort1.Open(); serialPort1.Sart(temp.ToString()); if (serialPort1.IsOpen) { serialPort1.ReceivedData += new EventHandler <TEventArgs <string> >(sport_ReceivedData); UpdateCombinTextHandler = new HandleInterfaceUpdataDelegate(UpdateCombinText); serialPort1.NewLines = new string[] { "\r\n ", "\r\n ", "\r\n" }; } } } catch (Exception ex) { setMessage(MessageType.Error, ex.Message); flag = false; } return(flag); }
private void UDPServer_Start(string IP,string Port) { UDP_Server_Port = Convert.ToInt32(Port); string strDomain = IP; string ipAddress = string.Empty; System.Text.RegularExpressions.Regex check = new System.Text.RegularExpressions.Regex(@"^(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9])\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])$"); if (!check.IsMatch(strDomain)) { IPHostEntry hostEntry = Dns.Resolve(strDomain); IPEndPoint ipEndPoint = new IPEndPoint(hostEntry.AddressList[0], 0); //这就是你想要的 UDP_IP = ipEndPoint.Address.ToString(); } else { UDP_IP = strDomain; } UDPThread = new Thread(ThreadCallBack); thread_run = true; UDPThread.Start(); interfaceUpdataHandle = new HandleInterfaceUpdataDelegate(SetDevState); }
public bool TCP_Connect(string IP, string Port) { try { //定义一个套字节监听 包含3个参数(IP4寻址协议,流式连接,TCP协议) socketClient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); //客户端同样 需要获取文本框中的IP地址 string strDomain = IP; string ipAddress = string.Empty; System.Text.RegularExpressions.Regex check = new System.Text.RegularExpressions.Regex(@"^(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9])\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])$"); if (!check.IsMatch(strDomain)) { IPHostEntry hostEntry = Dns.Resolve(strDomain); IPEndPoint ipEndPoint = new IPEndPoint(hostEntry.AddressList[0], 0); //这就是你想要的 ipAddress = ipEndPoint.Address.ToString(); } else { ipAddress = strDomain; } IPAddress ipaddress = IPAddress.Parse(ipAddress); //将获取的ip地址和端口号绑定到网络节点endpoint上 IPEndPoint endpoint = new IPEndPoint(ipaddress, int.Parse(Port)); //注意: 这里是客服端套接字连接到Connect网络节点 不是Bind socketClient.Connect(endpoint); //new一个新线程 调用下面的接受服务端发来信息的方法RecMsg threadClient = new Thread(RecMsg); thread_run = true; //将窗体线程设置为与后台同步 threadClient.IsBackground = true; //启动线程 threadClient.Start(); interfaceUpdataHandle = new HandleInterfaceUpdataDelegate(SetDevState); return true; } catch (Exception err) { fdebug.AddInfo("Connect() " + err.Message ); //MessageBox.Show(err.Message, "提示", MessageBoxButtons.OK, MessageBoxIcon.Error); return false; } }
private bool BeginListen() { bool ret = false; if (m_UsePool) { DataTable dt = new DataTable(); if (lv_Category.SelectedItems.Count > 0) { if (lv_Category.SelectedItems[0].Tag.ToString() == "999999") { dt = DBPool.DBSerialAll(); } else { dt = DBPool.DBSerialByGroup(lv_Category.SelectedItems[0].Tag.ToString()); } } //启动串口池 if(dt.Rows.Count>0) { foreach (DataRow dr in dt.Rows) { SerialPort sp = new SerialPort(dr["SerialPort"].ToString(), 9600, Parity.None, 8); try { sp.ReceivedBytesThreshold = 8; sp.ReadBufferSize = 8; sp.WriteBufferSize = 8; sp.DataReceived += new SerialDataReceivedEventHandler(SerialPort_DataReceived);//DataReceived事件委托 //读写时间超时 sp.DtrEnable = true; sp.RtsEnable = true; sp.ReadTimeout = ReadTimeout; sp.WriteTimeout = WriteTimeout; sp.Open(); l_SerialPorts.Add(sp); } catch (Exception e) { txt_PoolInfo.AppendText(e.Message + "("+DateTime.Now + ")\r\n"); } } //interfaceUpdataHandle = new HandleInterfaceUpdataDelegate(SetDevState); } if (lv_Category.SelectedItems.Count > 0) { if (lv_Category.SelectedItems[0].Tag.ToString() == "999999") { dt = DBPool.DBTCPAll(); } else { dt = DBPool.DBTCPByGroup(lv_Category.SelectedItems[0].Tag.ToString()); } } //启动TCP池 if (dt.Rows.Count > 0) { foreach (DataRow dr in dt.Rows) { try { string[] tmpHostEntry = dr["HostEntry"].ToString().Split(':'); //定义一个套字节监听 包含3个参数(IP4寻址协议,流式连接,TCP协议) Socket tmpSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); //客户端同样 需要获取文本框中的IP地址 string strDomain = tmpHostEntry[0]; string ipAddress =string.Empty; System.Text.RegularExpressions.Regex check = new System.Text.RegularExpressions.Regex(@"^(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9])\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])$"); if (!check.IsMatch(strDomain)) { IPHostEntry hostEntry = Dns.Resolve(strDomain); IPEndPoint ipEndPoint = new IPEndPoint(hostEntry.AddressList[0], 0); //这就是你想要的 ipAddress = ipEndPoint.Address.ToString(); } else { ipAddress=strDomain; } IPAddress ipaddress = IPAddress.Parse(ipAddress); //将获取的ip地址和端口号绑定到网络节点endpoint上 IPEndPoint endpoint = new IPEndPoint(ipaddress, int.Parse(tmpHostEntry[1])); //注意: 这里是客服端套接字连接到Connect网络节点 不是Bind tmpSocket.Connect(endpoint); //new一个新线程 调用下面的接受服务端发来信息的方法RecMsg //Thread tmpthreadClient = new Thread(RecMsg); //将窗体线程设置为与后台同步 //tmpthreadClient.IsBackground = true; //启动线程 //tmpthreadClient.Start(); HandleInterfaceUpdataDelegate hud = new HandleInterfaceUpdataDelegate(SetDevState); l_Sockets.Add(tmpSocket); object obj = new object[] { this, hud, l_Sockets }; WorkerClass wc = new WorkerClass(); bool rc = ThreadPool.QueueUserWorkItem(new WaitCallback(wc.RunProcess), obj); ThreadPool.QueueUserWorkItem(new WaitCallback(wc.RunProcess), obj); //l_ClientThreads.Add(tmpthreadClient); } catch (Exception e) { txt_PoolInfo.AppendText(dr["HostEntry"].ToString() + " " + e.Message + "(" + DateTime.Now + ")\r\n"); } } //interfaceUpdataHandle = new HandleInterfaceUpdataDelegate(SetDevState); } int ConCount=l_SerialPorts.Count + l_Sockets.Count; if (ConCount > 0) { interfaceUpdataHandle = new HandleInterfaceUpdataDelegate(SetDevState); tssl_Info.Text = "已成功连接" + ConCount.ToString() + "个端口"; btnBeginListen.Enabled = false; btnEndListen.Enabled = true; UnknownStatus(); EnableBtn(true); ret = true; } else { tssl_Info.Text = "没有连接端口"; } } else { if (rb_TCP.Checked) { try { if (TCP_Connect(txtIP.Text, txtPort.Text)) { btnBeginListen.Enabled = false; btnEndListen.Enabled = true; EnableBtn(true); UnknownStatus(); EnableBtn(true); ret = true; rb_COM.Enabled = false; rb_TCP.Enabled = false; rb_UDP.Enabled = false; txtPort.Enabled = false; txtIP.Enabled = false; } } catch (Exception err) { fdebug.AddInfo("btnBeginListen_Click() " + err.Message); // MessageBox.Show(err.Message, "提示", MessageBoxButtons.OK, MessageBoxIcon.Error); } } else if (rb_UDP.Checked) { UDPServer_Start(txtIP.Text, txtPort.Text); btnBeginListen.Enabled = false; btnEndListen.Enabled = true; EnableBtn(true); rb_COM.Enabled = false; rb_TCP.Enabled = false; rb_UDP.Enabled = false; txtPort.Enabled = false; txtIP.Enabled = false; } else if (rb_COM.Checked) { try { if (serialPort == null) { int band = 9600; if (cb_Band.Text.Equals("Flex Wire")) { band = 115200; } else band=Convert.ToInt32(cb_Band.Text); serialPort = new SerialPort(cb_SerialPort.Text,band , Parity.None, 8); serialPort.ReceivedBytesThreshold = 8; serialPort.ReadBufferSize = 8; serialPort.WriteBufferSize = 8; serialPort.DataReceived += new SerialDataReceivedEventHandler(SerialPort_DataReceived);//DataReceived事件委托 //读写时间超时 serialPort.DtrEnable = true; serialPort.RtsEnable = true; serialPort.ReadTimeout = ReadTimeout; serialPort.WriteTimeout = WriteTimeout; serialPort.Open(); } btnBeginListen.Enabled = false; btnEndListen.Enabled = true; UnknownStatus(); EnableBtn(true); ret = true; interfaceUpdataHandle = new HandleInterfaceUpdataDelegate(SetDevState); rb_COM.Enabled = false; cb_SerialPort.Enabled = false; rb_TCP.Enabled = false; rb_UDP.Enabled = false; } catch (Exception err) { fdebug.AddInfo("btnBeginListen_Click() " + err.Message ); //MessageBox.Show(err.Message, "提示", MessageBoxButtons.OK, MessageBoxIcon.Error); } } SaveConnectCfg(); } timer_INQUIRE.Interval = 100; timer_INQUIRE.Enabled = true; timer_watchdog.Enabled = m_Reconnection; return ret; }
public SerialDataReceiveHandler(SerialPort serialPort, Control control) { this.MySerialPort = serialPort; this.MControl = control; interfaceUpdataHandle = new HandleInterfaceUpdataDelegate(UpdateSerialPortData);//实例化委托对象 }
private void Form1_Load(object sender, EventArgs e) { interfaceUpdataHandle = new HandleInterfaceUpdataDelegate(UpdateUI); //枚举本机串口号 string[] portNames = SerialPort.GetPortNames(); foreach (string name in portNames) { comboBox_serialNumber.Items.Add(name); } //默认选中最后一个串口号 comboBox_serialNumber.SelectedIndex = comboBox_serialNumber.Items.Count - 1; //枚举波特率 string[] baudrates = { "4800", "9600", }; foreach (string baud in baudrates) { comboBox_baud.Items.Add(baud); } //comboBox_baud.SelectedIndex = 0; comboBox_baud.SelectedIndex = comboBox_baud.Items.Count - 1; String[] CommandName = { "启动", "停止", }; foreach (String name in CommandName) { int i = dataGridView_cmd.Rows.Add(); dataGridView_cmd.Rows[i].Cells[0].Value = name; } //不可以用窗体里的定时器控件,因为对控件的操作比如定时器的启动和停止,需要在UI线程操作,在串口接收的函数里并不是UI线程在执行,无法操作 //定时一秒的串口接收等待时间 timer_serial = new System.Timers.Timer(1000); //定时十秒的短信发送超时时间 //注册计时器的事件 timer_serial.Elapsed += new ElapsedEventHandler(timer_serial_Tick); //设置是执行一次(false)还是一直执行(true),默认为true timer_serial.AutoReset = false; //每一个列表一个Table类变量。 tableCmd = new Table(mdbPath, tableNameCmd, dataGridView_c, null); tableAccount = new Table(mdbPath, tableNameAccount, dataGridView_a, null); tableIncome = new Table(mdbPath, tableNameIncome, dataGridView_i, chart1); tablePrice = new Table(mdbPath, tableNamePrice, dataGridView_d, null); tableDeviceRecord = new Table(mdbPath, tableNameDeviceRecord, dataGridView_r, null); tableDeviceSIM = new Table(mdbPath, tableNameDeviceSIM, dataGridView_s, null); RefreashTarget(); tablePrice.ReadFromAccess(); tableIncome.ReadFromAccess(); tableAccount.ReadFromAccess(); tableCmd.ReadFromAccess(); tableDeviceRecord.ReadFromAccess(); //将分页框和类的变量绑定 tabPageChart.Tag = tableIncome; tabPageAccount.Tag = tableAccount; tabPageCmd.Tag = tableCmd; tabPageRecord.Tag = tableDeviceRecord; tabPageSim.Tag = tableDeviceSIM; tabPagePrice.Tag = tablePrice; tabPageIncome.Tag = tableIncome; }