Quantcast
Channel: Active questions tagged crash - Stack Overflow
Viewing all articles
Browse latest Browse all 7197

TCPClient & TCPListener | Connection reset by peer crash c#

$
0
0

I have an TCP Listener (server) and a TCP Client (client) (in 2 different programs).

If my client is forcely stopped (CTRL^C or other) the server program is stopped with this error :

Unhandled Exception:System.IO.IOException: Unable to read data from the transport connection: Connection reset by peer. ---> System.Net.Sockets.SocketException: Connection reset by peer  at System.Net.Sockets.Socket.Receive (System.Byte[] buffer, System.Int32 offset, System.Int32 size, System.Net.Sockets.SocketFlags socketFlags) [0x0001a] in <a9a08e39ba304bd0a84c49bd158dfc02>:0  at System.Net.Sockets.NetworkStream.Read (System.Byte[] buffer, System.Int32 offset, System.Int32 size) [0x000b4] in <a9a08e39ba304bd0a84c49bd158dfc02>:0   --- End of inner exception stack trace ---  at System.Net.Sockets.NetworkStream.Read (System.Byte[] buffer, System.Int32 offset, System.Int32 size) [0x0010f] in <a9a08e39ba304bd0a84c49bd158dfc02>:0  at loginserver.Program.ThreadProc (System.Object obj) [0x00090] in <a4c14a5640d24e26ae5e0c9bc660a224>:0  at System.Threading.QueueUserWorkItemCallback.WaitCallback_Context (System.Object state) [0x0000e] in <d0e12f672b88444ab4b6d9b2ecf20142>:0  at System.Threading.ExecutionContext.RunInternal (System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, System.Object state, System.Boolean preserveSyncCtx) [0x0008d] in <d0e12f672b88444ab4b6d9b2ecf20142>:0  at System.Threading.ExecutionContext.Run (System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, System.Object state, System.Boolean preserveSyncCtx) [0x00000] in <d0e12f672b88444ab4b6d9b2ecf20142>:0  at System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem () [0x0002a] in <d0e12f672b88444ab4b6d9b2ecf20142>:0  at System.Threading.ThreadPoolWorkQueue.Dispatch () [0x00096] in <d0e12f672b88444ab4b6d9b2ecf20142>:0  at System.Threading._ThreadPoolWaitCallback.PerformWaitCallback () [0x00000] in <d0e12f672b88444ab4b6d9b2ecf20142>:0[ERROR] FATAL UNHANDLED EXCEPTION: System.IO.IOException: Unable to read data from the transport connection: Connection reset by peer. ---> System.Net.Sockets.SocketException: Connection reset by peer  at System.Net.Sockets.Socket.Receive (System.Byte[] buffer, System.Int32 offset, System.Int32 size, System.Net.Sockets.SocketFlags socketFlags) [0x0001a] in <a9a08e39ba304bd0a84c49bd158dfc02>:0  at System.Net.Sockets.NetworkStream.Read (System.Byte[] buffer, System.Int32 offset, System.Int32 size) [0x000b4] in <a9a08e39ba304bd0a84c49bd158dfc02>:0   --- End of inner exception stack trace ---  at System.Net.Sockets.NetworkStream.Read (System.Byte[] buffer, System.Int32 offset, System.Int32 size) [0x0010f] in <a9a08e39ba304bd0a84c49bd158dfc02>:0  at loginserver.Program.ThreadProc (System.Object obj) [0x00090] in <a4c14a5640d24e26ae5e0c9bc660a224>:0  at System.Threading.QueueUserWorkItemCallback.WaitCallback_Context (System.Object state) [0x0000e] in <d0e12f672b88444ab4b6d9b2ecf20142>:0  at System.Threading.ExecutionContext.RunInternal (System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, System.Object state, System.Boolean preserveSyncCtx) [0x0008d] in <d0e12f672b88444ab4b6d9b2ecf20142>:0  at System.Threading.ExecutionContext.Run (System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, System.Object state, System.Boolean preserveSyncCtx) [0x00000] in <d0e12f672b88444ab4b6d9b2ecf20142>:0  at System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem () [0x0002a] in <d0e12f672b88444ab4b6d9b2ecf20142>:0  at System.Threading.ThreadPoolWorkQueue.Dispatch () [0x00096] in <d0e12f672b88444ab4b6d9b2ecf20142>:0  at System.Threading._ThreadPoolWaitCallback.PerformWaitCallback () [0x00000] in <d0e12f672b88444ab4b6d9b2ecf20142>:0

What can i do to cancel this crash. I want to make a server to manage my network, and if a computer is forcely deconnected, i don't want to a crash from the server.

My code :

Server -

class Program    {        TcpListener server = null;        static void Main(string[] args)        {            TcpListener server = null;            try            {                string ports = args[1];                Int32 port = Int32.Parse(ports);                IPAddress localAddr = IPAddress.Parse(args[0]);                server = new TcpListener(localAddr, port);                server.Start();                TcpClient client;                while (true)                {                    client = server.AcceptTcpClient();                    ThreadPool.QueueUserWorkItem(ThreadProc, client);                }            }            catch (SocketException e)            {                Console.WriteLine("SocketException: {0}", e);            }            Console.WriteLine("\nHit enter to continue...");            Console.Read();        }        private static void ThreadProc(object obj)        {            var client = (TcpClient)obj;            Byte[] bytes = new Byte[256];            String data = null;            while (true)            {                Console.WriteLine("Waiting for a connection... ");                var networkStream = client.GetStream();                var pi = networkStream.GetType().GetProperty("Socket", BindingFlags.NonPublic | BindingFlags.Instance);                var socketIp = ((Socket)pi.GetValue(networkStream, null)).RemoteEndPoint.ToString();                Console.WriteLine("Connected -> " + socketIp);                data = null;                NetworkStream stream = client.GetStream();                int i;                while ((i = stream.Read(bytes, 0, bytes.Length)) != 0)                {                    data = System.Text.Encoding.ASCII.GetString(bytes, 0, i);                    Console.WriteLine("Received: {0}", data );                }                client.Close();            }        }    }

Client -

class Program    {        static void Main(string[] args)        {            while (true)            {                 string IP = "localhost";                int port = 13000;                TcpClient client = new TcpClient();                try                {                     client.Connect(IP, port);                }                catch (Exception ex)                {                    Console.WriteLine("Error : " + ex.Message);                }                if (client.Connected)                {                    NetworkStream stream = client.GetStream();                    Console.WriteLine("Connected !");                    string tosend = "Hey" !;                    Console.WriteLine("Send: " + tosend);                    Byte[] data = System.Text.Encoding.ASCII.GetBytes(tosend);                    stream.Write(data, 0, data.Length);                    while (client.Connected)                    {                        Thread.Sleep(1000);                    }                    stream.Close();                    client.Close();                    Thread.Sleep(10000);                }            }        }    }

Viewing all articles
Browse latest Browse all 7197

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>