/// <summary> /// 根据输入状态选择相应的连接模式 /// </summary> private void UPNPStartServer() { if (isTcpRun == false) { bool state = false; if (radioClient.IsChecked == true) { linkMode = LinkNetMode.TcpClient; } else if (true == checkIsSub.IsChecked) //使用UNPN绑定 { linkMode = LinkNetMode.UPNPServer; } else { linkMode = LinkNetMode.TcpServer; } state = NetUPNPInit(linkMode); if (state) { checkIsSub.IsEnabled = false; UpdateInputStateLink(); } } }
/// <summary> /// UNPN初始化 /// </summary> /// <param name="state">true 为路由绑定, false 为 普通模式</param> /// <returns>成功为true</returns> bool NetUPNPInit(LinkNetMode state) { try { if (upnpServer != null) { throw new Exception("upnpServer 不为空,不能建立重复连接,必须首先断开"); } //txtLinkMsg.Text = ""; ip = getIP(); int port = int.Parse(txtPort.Text); if (state == LinkNetMode.UPNPServer) { txtLinkMsg.Text += "UPnp Server is running ... \n"; txtLinkMsg.ScrollToEnd(); upnpServer = new UpnpServer(port, port); //作为服务器端,产生数据 // serialControlCenter.RtuFrameArrived += tcpTransmission_RtuFrameArrived; } else if (state == LinkNetMode.TcpServer) { txtLinkMsg.Text += "TcpServer is running ... \n"; txtLinkMsg.ScrollToEnd(); upnpServer = new UpnpServer(ip, port); //作为服务器端,产生数据 // serialControlCenter.RtuFrameArrived += tcpTransmission_RtuFrameArrived; } else if (state == LinkNetMode.TcpClient) { txtLinkMsg.Text += "TcpClient is running ... \n"; txtLinkMsg.ScrollToEnd(); upnpServer = new UpnpServer(ip, port, false); } upnpServer.NetDataArrayArrived += NetData_Arrived; upnpServer.ExceptionArrived += Exception_TestArrived; upnpServer.LinkingMsg += LinkMsg_TestArrived; return(true); } catch (Exception ex) { MessageBox.Show(ex.Message, "UPNP net初始化"); return(false); } }