private void ReceiveCallback(IAsyncResult ar) { Socket socket = (Socket)ar.AsyncState; try { int received = socket.EndReceive(ar); if (received <= 0) { CloseClient(index); } else { byte[] dataBuffer = new byte[received]; Array.Copy(Buffer, dataBuffer, received); NetworkDataHandler.HandleNetworkInformation(index, dataBuffer); socket.BeginReceive(Buffer, 0, Buffer.Length, SocketFlags.None, new AsyncCallback(ReceiveCallback), socket); } } catch (Exception ex) { CloseClient(index); System.Diagnostics.Debug.WriteLine(ex); } }
private static void OnReceive() { byte[] sizeInfo = new byte[4]; byte[] receivedBuffer = new byte[1024]; int totalRead = 0, currentRead = 0; try { currentRead = totalRead = ClientSocket.Receive(sizeInfo); if (totalRead <= 0) { Console.WriteLine("Not connected to server."); } else { Console.WriteLine("Reading data..."); while (totalRead < sizeInfo.Length && currentRead > 0) { currentRead = ClientSocket.Receive(sizeInfo, totalRead, sizeInfo.Length - totalRead, SocketFlags.None); totalRead += currentRead; } int messageSize = 0; messageSize |= sizeInfo[0]; messageSize |= (sizeInfo[1] << 8); messageSize |= (sizeInfo[2] << 16); messageSize |= (sizeInfo[3] << 24); byte[] data = new byte[messageSize]; totalRead = 0; currentRead = totalRead = ClientSocket.Receive(data, totalRead, data.Length - totalRead, SocketFlags.None); while (totalRead < messageSize && currentRead > 0) { currentRead = ClientSocket.Receive(data, totalRead, data.Length - totalRead, SocketFlags.None); totalRead += currentRead; } Debug.WriteLine("Received message, handling"); NetworkDataHandler.HandleNetworkInformation(messageSize, data); } } catch { Console.WriteLine("Not connected to server."); } }