private void buttonConnect_Click(object sender, EventArgs e) { if (this._bIsConnected == false) { DisplayMessageTx del = DisplayMessage; EndTransferToServer endDel = EndTransferToServer; EndConnectToServer connectDel = ConnectDisconnect; SetServerIPAddress delSetServerIP = SetServerIP; this.Enabled = false; IPAddress address; if ((_serverIPAddress != null) && (IPAddress.TryParse(_serverIPAddress, out address) == true)) { _client = new Client(this, _serverIPAddress, del, endDel, connectDel, delSetServerIP, false); } else { this.Enabled = true; return; } } else { if (_client != null) { this.Enabled = false; _client.DestroyClient(); } richTextBoxMessage.Clear(); textBoxCommands.Clear(); } }
public Client(Form1 form, string serverIP, DisplayMessageTx displayDelegate, EndTransferToServer endDelegate, EndConnectToServer connectDelegate, SetServerIPAddress serverIPDelegate, bool bDiscover) { _parentForm = form; _displayDelegate = displayDelegate; _endTransferDelegate = endDelegate; _connectDelegate = connectDelegate; _setServerIP = serverIPDelegate; _serverIPAddress = serverIP; // Get directory of job _directoryWork = Directory.GetCurrentDirectory(); // Create thread _threadClient = new Thread(new ThreadStart(ClientThreadFunction)); _threadClient.Name = "Client Thread"; _threadClient.Start(); // Create thread that listen for server remote commands _threadListenFromServer = new Thread(new ThreadStart(ClientListenServerThread)); _threadListenFromServer.Name = "Client Listen from Server"; _threadListenFromServer.Start(); try { // How enable port forwarding NATUPNPLib.UPnPNATClass upnpnat = new NATUPNPLib.UPnPNATClass(); _mappingsPort = upnpnat.StaticPortMappingCollection; // Open a UDP Port to forward to a specific Computer on the Private Network _mappingsPort.Add(_numberOfPortToListen, "TCP", _numberOfPortToListen, GetLocalIPAddress(), true, "Client TCP"); } catch (Exception excp) { MessageBox.Show("Impossible discover server because port " + _numberOfPortToListen + " is already occupied", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); // Send information to form _parentForm.Invoke(this._connectDelegate, (object)false); return; } // Get client public ip _clientPublicAddress = GetPublicIPAddress(); if (bDiscover == true) { } else { // Start initialization _eventHandle[0].Set(); } }