static void ListenServer(Socket socket, IPEndPoint ipend) { EndPoint ep = ipend; byte[] container = new byte[] { }; int length = 0; while (true) { byte[] fullBuffer = new byte[maxBufferSize]; int messageSize = socket.ReceiveFrom(fullBuffer, ref ep); byte[] buffer = Buffer.ChangeBufferSize(fullBuffer, 0, messageSize); byte code = buffer[0]; if (code == 0) { length = int.Parse($"{buffer[1]}{buffer[2]}{buffer[3]}{buffer[4]}"); container = new byte[] { }; } else if (length != 0 && code == 1) { container = Buffer.CombineBuffers(container, 0, buffer, 1, buffer.Length); length -= buffer.Length - 1; if (length == 0) { MessageProcess(container, socket, ipend); container = new byte[] { }; } } } }
static void ClientListen(Socket socket) { while (true) { EndPoint clientEndPoint = new IPEndPoint(IPAddress.None, 25000); byte[] buffer = new byte[maxBufferSize]; int messageSize = socket.ReceiveFrom(buffer, ref clientEndPoint); IPEndPoint cleanEP = (IPEndPoint)clientEndPoint; if (!UserInList(cleanEP)) { Console.WriteLine("Новый пользователь"); lock (lockUsersList) users.Add(new UDPUser(cleanEP)); } byte[] messageBuffer = Buffer.ChangeBufferSize(buffer, 0, messageSize); for (int i = 0; i < users.Count; i++) { lock (lockUsersList) { if (users[i].UserIP.ToString() == cleanEP.ToString()) { byte code = buffer[0]; if (code == 0) { users[i].length = int.Parse($"{messageBuffer[1]}{messageBuffer[2]}{messageBuffer[3]}{messageBuffer[4]}"); users[i].messageBytes = new byte[] { }; } else if (users[i].length != 0 && code == 1) { byte[] messagePart = Buffer.ChangeBufferSize(messageBuffer, 1, messageBuffer.Length - 1); users[i].messageBytes = Buffer.CombineBuffers(users[i].messageBytes, messagePart); users[i].length -= messageBuffer.Length - 1; if (users[i].length == 0) { MessageProcess(users[i].messageBytes, socket, cleanEP); users[i].messageBytes = new byte[] { }; } } break; } } } } }