private void work() { bool running = true; Socket socket = m_client.Client; while (running) { Header header = new Header(); byte[] buffer = new byte[sizeof(uint) * 2]; SocketError err; socket.Receive(buffer,0,sizeof(uint)*2, SocketFlags.None, out err); if (err != SocketError.Success) { running = false; quit(); break; } header.set(buffer); byte[] buffer2 = new byte[ReceiveBufferSize]; int recvd = 0; String cmd = ""; while (recvd < header.length) { int rcvd = socket.Receive(buffer2,ReceiveBufferSize-1, SocketFlags.None); buffer2[rcvd] = (byte)'\0'; recvd += rcvd; for (int i = 0; i < rcvd; ++i) { cmd += (char)buffer2[i]; } } Command command = new Command(); command.worker = this; command.header = header; command.command = cmd; m_service.addCommand(command); } }