Exemple #1
0
        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;
        }
Exemple #4
0
        // 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;
            }
        }