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(); } }
private void ServerForm_Load(object sender, EventArgs e) { this.Enabled = false; StartStopServer dele = this.ActionStartStop; ServerMessageReceived messageReceived = this.ServerCommandReceived; ServerMessageResponse messageResponse = this.ServerCommandResponse; AddClientsToServer addClient = this.AddClientToServer; RemoveClientsToServer removeClient = this.RemoveClientToServer; SetServerIPAddress serverIP = this.DisplayServerIP; _server = new Server(this, dele, messageReceived, messageResponse, addClient, removeClient, serverIP); this.Enabled = true; }
// Constructor public Server(ServerForm form, StartStopServer del, ServerMessageReceived action, ServerMessageResponse actionResponse, AddClientsToServer addClient, RemoveClientsToServer removeClient, SetServerIPAddress serverIPDelegate) { // Create thread _serverThread = new Thread(new ThreadStart(ServerMainThreadFunction)); _serverThread.Name = "Server Main Thread"; _serverThread.Start(); // Create thread for UDP connection _threadSendToClient = new Thread(new ThreadStart(ThreadReceiveResponse)); _threadSendToClient.Name = "Server Thread Listener"; _threadSendToClient.Start(); _parentForm = form; _endActionDelegate = del; _messageReceivedAction = action; _messageResponseAction = actionResponse; _addClientDelegate = addClient; _removeClientDelegate = removeClient; _displayServerIP = serverIPDelegate; // Get directory of job _directoryWork = Directory.GetCurrentDirectory(); // Get local IP address _serverIPAddress = GetPublicIPAddress(); _parentForm.Invoke(_displayServerIP, (object)_serverIPAddress); // How enable port forwarding NATUPNPLib.UPnPNATClass upnpnat = new NATUPNPLib.UPnPNATClass(); _mappingsPort = upnpnat.StaticPortMappingCollection; GetLocalIPAddress(); try { _mappingsPort.Add(_numberOfPortToListen, "TCP", _numberOfPortToListen, GetLocalIPAddress(), true, "CNC TCP Server"); } catch (Exception excp) { MessageBox.Show(excp.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); // Send action _parentForm.Invoke(this._endActionDelegate, (object)false); return; } }