Results 1 to 8 of 8
  1. #1
    CrazyChickenNeverDie's Avatar
    Join Date
    Sep 2018
    Gender
    male
    Posts
    2
    Reputation
    10
    Thanks
    2

    A Simple TCP Server

    This is a simple tcp server for sending and receiving strings

    now just to clarify, i know i could optimize it a bit and change the way the methods are implemented.
    this server designed specifically for 1 client connection and termination. as a replacement for p2p connection.
    dont ask why or what for, its a project im working on, and wanted to share it with the public. (yes, it is related to hacking)

    i won't give the Client source code

    Code:
    using System;
    using System.ComponentModel;
    using System.Diagnostics;
    using System.Net;
    using System.Net.Sockets;
    using System.Text;
    using System.Windows.Forms;
    
    namespace TcpClassTest
    {
        class TcpServer
        {
            #region Props and objects
    
            private TcpListener server;
            private TcpClient client;
            private const int MaxPacketSize = 0x1F4;
            private Boolean isExit = false;
            private BackgroundWorker ListenThread;
            private BackgroundWorker ReceiveThread;
    
            #endregion
    
            #region Event Handlers
    
            public event EventHandler<ClientConnectedEventsArgs> ClientConnected;
            protected virtual void OnClientConnected(ClientConnectedEventsArgs args)
            {
                try
                {
                    ClientConnected?.Invoke(this, args);
                }
                catch { }
            }
    
            public event EventHandler ListenStarted;
            protected virtual void OnListenStarted(EventArgs args)
            {
                try
                {
                    ListenStarted.Invoke(this, args);
                }
                catch { }
            }
    
            public event EventHandler<MessageReceiveEventArgs> MessageReceived;
            protected virtual void OnMessageReceived(MessageReceiveEventArgs args)
            {
                try
                {
                    MessageReceived?.Invoke(this, args);
                }
                catch { }
            }
    
            #endregion
    
            #region Methods
    
            /// <summary>
            /// Start listen for incoming connectings on the specific port
            /// </summary>
            /// <param name="port">the port to bind the socket to</param>
            public void Start(int port) {
                string addr = null;
                foreach(var ip in Dns.GetHostEntry(Dns.GetHostName()).AddressList)
                {
                    if(ip.AddressFamily == AddressFamily.InterNetwork)
                    {
                        addr = ip.ToString();
                    }
                }
                server = new TcpListener(new IPEndPoint(IPAddress.Parse(addr), port));
    
                ListenThread = new BackgroundWorker();
                ListenThread.WorkerReportsProgress = true;
                ListenThread.WorkerSupportsCancellation = true;
                ListenThread.DoWork += ListenThread_DoWork;
                ListenThread.ProgressChanged += ListenThread_ProgressChanged;
                ListenThread.RunWorkerAsync();
    
                ReceiveThread = new BackgroundWorker();
                ReceiveThread.WorkerReportsProgress = true;
                ReceiveThread.WorkerSupportsCancellation = true;
                ReceiveThread.DoWork += ReceiveThread_DoWork;
                ReceiveThread.ProgressChanged += ReceiveThread_ProgressChanged;
    
                OnListenStarted(EventArgs.Empty);
            }
    
            /// <summary>
            /// Stops the server and dispose everything related to TcpServer class
            /// </summary>
            public void Stop() {
                Dispose();
            }
    
            /// <summary>
            /// Dispose everything in TcpServer class
            /// </summary>
            private void Dispose() {
                client = null;
                server = null;
                ListenThread.DoWork -= ListenThread_DoWork;
                ListenThread.ProgressChanged -= ListenThread_ProgressChanged;
                ListenThread = null;
                ReceiveThread.DoWork -= ReceiveThread_DoWork;
                ReceiveThread.ProgressChanged -= ReceiveThread_ProgressChanged;
                ReceiveThread = null;
                ClientConnected = null;
                MessageReceived = null;
                ListenStarted = null;
            }
    
            /// <summary>
            /// Send message to the connected client
            /// </summary>
            public void SendMessage(string msg)
            {
                if(client != null && clien*****nnected)
                {
                    byte[] buff = Encoding.ASCII.GetBytes(msg);
                    client.Client.Send(buff);
                }
            }
    
            #endregion
    
            #region ListenThread
    
            private void ListenThread_DoWork(object sender, DoWorkEventArgs e)
            {
                if(!isExit)
                {
                    ///
                    /// Try to start the server
                    ///
                    try
                    {
                        server.Start();
                    }
                    catch(Exception r)
                    {
                        isExit = true;
                        Debug.Write("[ERROR] - Failed to start server\n" + r.Source + "\n" + r.Message + "\n" + r.InnerException + "\n" + r.StackTrace + "\n" + r.HResult);
                    }
                }
    
                while (!isExit)
                {
                    ///
                    /// Accept the pending client request and connect him to the server, then stop listen for connections
                    ///
                    try
                    {
                        client = server.AcceptTcpClient();
                        server.Stop();
                        ListenThread.ReportProgress(0, "cmd:connected");
                        ReceiveThread.RunWorkerAsync();
                        Debug.Write("[SUCCESS] - User connected to server\n");
                        Debug.Write("[SUCCESS] - Server stopped listening for connecions\n");
                        isExit = true;
                        break;
                    }
                    catch (Exception r)
                    {
                        isExit = true;
                        Debug.Write("[ERROR] - User failed to connect...\n");
                        Debug.Write("[ERROR] - Failed to connect client to the server\n" + r.Source + "\n" + r.Message + "\n" + r.InnerException + "\n" + r.StackTrace + "\n" + r.HResult);
                    }
                }
            }
    
            private void ListenThread_ProgressChanged(object sender, ProgressChangedEventArgs e)
            {
                //Raise the custom event
                try
                {
                    ClientConnectedEventsArgs args = new ClientConnectedEventsArgs();
                    args.Client = client;
                    OnClientConnected(args);
                }
                catch { }
            }
    
            #endregion
    
            #region ReceiveThread
    
            private void ReceiveThread_DoWork(object sender, DoWorkEventArgs e)
            {
                while(!isExit)
                {
                    try
                    {
                        if(client != null)
                        {
                            byte[] buff = new byte[MaxPacketSize];
                            client.Client.Receive(buff);
                            string s = Encoding.ASCII.GetString(buff);
                            ReceiveThread.ReportProgress(0, s);
                        }
                    }
                    catch
                    {
                        isExit = true;
                        Debug.Write("[ERROR] - Failed to get message from client\nClient is null or disconnected");
                    }
                }
            }
    
            private void ReceiveThread_ProgressChanged(object sender, ProgressChangedEventArgs e)
            {
                try
                {
                    MessageReceiveEventArgs args = new MessageReceiveEventArgs();
                    args.Message = e.UserState as string;
                    OnMessageReceived(args);
                }
                catch { }
            }
    
            #endregion
        }
    
        #region Custom Event Args
    
        public class MessageReceiveEventArgs : EventArgs
        {
            public string Message { get; set; }
        }
    
        public class ClientConnectedEventsArgs : EventArgs
        {
            public TcpClient Client { get; set; }
        }
    
        #endregion
    }

  2. The Following 2 Users Say Thank You to CrazyChickenNeverDie For This Useful Post:

    defaulto (10-09-2018),MikeRohsoft (10-01-2018)

  3. #2
    defaulto's Avatar
    Join Date
    Aug 2017
    Gender
    male
    Posts
    461
    Reputation
    427
    Thanks
    347
    My Mood
    Angelic
    Thank you for sharing.

  4. #3
    icotokenservice's Avatar
    Join Date
    Oct 2018
    Gender
    male
    Posts
    14
    Reputation
    10
    Thanks
    1

    Nice

    Great tip here

  5. #4
    Venipa's Avatar
    Join Date
    Jan 2015
    Gender
    male
    Posts
    11
    Reputation
    10
    Thanks
    100
    My Mood
    Doh
    thanks for sharing but the better alternative would be to use WatsonTcp there's also a NuGet Package.

    ******: https://******.com/jchristn/WatsonTcp

    Regards

  6. #5
    brlala's Avatar
    Join Date
    Jan 2014
    Gender
    male
    Posts
    15
    Reputation
    10
    Thanks
    1
    thanks for the share

  7. #6
    minakshisondule's Avatar
    Join Date
    Nov 2018
    Gender
    female
    Location
    Pune
    Posts
    15
    Reputation
    10
    Thanks
    0

    A Simple TCP Server

    Very useful information..Thank you for sharing this.

  8. #7
    lemdpcfa's Avatar
    Join Date
    Aug 2012
    Gender
    male
    Location
    Paris
    Posts
    12
    Reputation
    10
    Thanks
    0
    thanks but actually i would recommend using a websocket (ratchet in php for example)
    if you want to interract with a db for e.g

  9. #8
    XoXlonG's Avatar
    Join Date
    Sep 2019
    Gender
    male
    Posts
    22
    Reputation
    10
    Thanks
    0
    Thanks for the useful info

Similar Threads

  1. [Release] Simple Private Server by RaymondW - HAMACHI
    By jlr2_08 in forum Realm of the Mad God Private Servers
    Replies: 11
    Last Post: 06-29-2013, 10:53 PM
  2. [Release] League of Legends Simple Server Switcher
    By qqzzxxcc in forum League of Legends Hacks & Cheats
    Replies: 26
    Last Post: 10-30-2012, 01:26 PM
  3. [Patched] Simple Hotkey [ >> Server Crasher << ]
    By neononxxx in forum Combat Arms Hacks & Cheats
    Replies: 55
    Last Post: 10-28-2011, 04:35 AM
  4. [Help Request] Simple server
    By coteanualex in forum Minecraft Help
    Replies: 1
    Last Post: 05-27-2011, 03:48 PM
  5. Any Simple hack undetected on pb servers
    By rompemente in forum Call of Duty Modern Warfare Help
    Replies: 6
    Last Post: 09-19-2010, 04:20 AM