Exemple #1
0
        private void bgw_StartListner_DoWork(object sender, DoWorkEventArgs e)
        {
            IPEndPoint localEndPoint = new IPEndPoint(IPAddress.Parse(ServerIP), int.Parse(Port));

            listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

            try
            {
                listener.Bind(localEndPoint);
                listener.Listen(100);
                LogRecived?.Invoke(LogTypes.SuccessfulInitial, "Network Listener Was Started Successfully");

                while (true)
                {
                    allDone.Reset();
                    LogRecived?.Invoke(LogTypes.WaitingForConnection, "Network Listener Waiting for a connection...");
                    listener.BeginAccept(new AsyncCallback(AcceptCallback), listener);
                    allDone.WaitOne();
                }
            }
            catch (Exception ex)
            {
                LogRecived?.Invoke(LogTypes.UnsuccessfulInitial, ex.ToString());
            }
        }
Exemple #2
0
        public void StopListening()
        {
            listener.Close();
            listener         = null;
            bgw_StartListner = null;

            CountOfClinetChange?.Invoke();

            LogRecived?.Invoke(LogTypes.ServerStoped, "Server stopped");
        }
Exemple #3
0
        public void AcceptCallback(IAsyncResult ar)
        {
            allDone.Set();

            if (OnlineSocket == null)
            {
                OnlineSocket = new List <Socket>();
            }

            if (listener == null)
            {
                return;
            }

            Socket handler = listener.EndAccept(ar);

            CountOfClinetChange?.Invoke();

            LogRecived?.Invoke(LogTypes.ClientConnected, string.Format("Client {0} is now connected", handler.IpAdress()));

            if (!OnlineSocket.Contains(handler))
            {
                //OnlineSocket.ForEach(x =>
                //{
                //    if (x!=null && x.IpAdress() == handler.IpAdress())
                //        x = null;
                //});

                for (int i = 0; i < OnlineSocket.Count; i++)
                {
                    if (OnlineSocket[i] != null)
                    {
                        if (OnlineSocket[i].IpAdress() == handler.IpAdress())
                        {
                            OnlineSocket[i] = null;
                        }
                    }
                }

                OnlineSocket.Add(handler);
                OnClientConnect?.Invoke(handler.IpAdress());
            }

            // Create the state object.
            StateObject state = new StateObject();

            state.workSocket = handler;
            handler.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0, new AsyncCallback(ReadCallback), state);
        }
Exemple #4
0
        public void ReadCallback(IAsyncResult ar)
        {
            string content = string.Empty;

            // Retrieve the state object and the handler socket
            // from the asynchronous state object.
            StateObject state     = (StateObject)ar.AsyncState;
            Socket      handler   = state.workSocket;
            int         bytesRead = 0;

            try
            {
                if (!((handler.Poll(1000, SelectMode.SelectRead) && (handler.Available == 0)) || !handler.Connected))
                {
                    // Read data from the client socket.
                    bytesRead = handler.EndReceive(ar);
                }
                else
                {
                    LogRecived?.Invoke(LogTypes.ClientDisconnected, string.Format("Client {0} is now disconected: ", handler.IpAdress()));
                    OnClientDisConnect?.Invoke(handler.IpAdress());
                }
            }
            catch (Exception ex)
            {
                LogRecived?.Invoke(LogTypes.Error, ex.ToString());
            }

            if (bytesRead > 0)
            {
                // There  might be more data, so store the data received so far.
                //state.sb.Append(Encoding.ASCII.GetString(state.buffer, 0, bytesRead));
                //content = Encoding.Unicode.GetString(state.buffer, 0, bytesRead);

                for (int i = 0; i < bytesRead; i++)
                {
                    content += (char)state.buffer[i];
                }

                handler.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0, new AsyncCallback(ReadCallback), state);

                DataRecived?.Invoke(((IPEndPoint)(((StateObject)(ar.AsyncState)).workSocket.RemoteEndPoint)).Address.ToString(), content);
            }
        }
Exemple #5
0
        private void SendCallback(IAsyncResult ar)
        {
            try
            {
                // Retrieve the socket from the state object.
                Socket handler = (Socket)ar.AsyncState;

                // Complete sending the data to the remote device.
                int bytesSent = handler.EndSend(ar);

                LogRecived?.Invoke(LogTypes.DateSent, string.Format("Sent {0} bytes to client.", bytesSent));

                //handler.Shutdown(SocketShutdown.Both);
                //handler.Close();
            }
            catch (Exception e)
            {
                LogRecived?.Invoke(LogTypes.Error, e.ToString());
            }
        }
Exemple #6
0
        public void Send(string IpAddress, string data)
        {
            if (OnlineSocket == null)
            {
                LogRecived?.Invoke(LogTypes.Error, "OnlineSocket is null");
                return;
            }

            for (int i = 0; i < OnlineSocket.Count; i++)
            {
                if (OnlineSocket[i] == null)
                {
                    continue;
                }

                if (OnlineSocket[i].IpAdress() == IpAddress)
                {
                    Send(OnlineSocket[i], data);
                    break;
                }
            }
        }