private void PacketRecieved(IAsyncResult ar) // Function that is being called whenever client recieves data from server { Socket Client = (Socket)ar.AsyncState; int received; try { received = Client.EndReceive(ar); } catch (SocketException) { Log("Client forcefully disconnected", ConsoleColor.Red, ConsoleColor.Gray); Client.Close(); return; } byte[] recBuf = new byte[received]; Array.Copy(buffer, recBuf, received); if (received == 0) { Log("Lost Connection To The Server", ConsoleColor.Red, ConsoleColor.Gray); return; } PacketReader pr = new PacketReader(recBuf); Packet packet = Packet.Create(recBuf); FirePackedRecieved(Client, packet); Client.BeginReceive(buffer, 0, BUFFER_SIZE, SocketFlags.None, PacketRecieved, Client); // Read incoming packet again }