/**线程接收函数*/ private void recPacketFun(object clientSocket) { if (clientSocket == null) { return; } Socket client = (Socket)clientSocket; if (!client.Connected) { return; } NetworkStream stream = new NetworkStream(client); BinaryReader reader = new BinaryReader(stream); while (isClientRun) { //Console.WriteLine("recPacketThread***********"); try { ENUMS.MESSAGETYPE messageType = (ENUMS.MESSAGETYPE)reader.ReadByte(); CmdProcess.processCmd(this, reader, messageType); } catch (Exception ex) { Console.WriteLine("readThread:client is off line"); stopClient();/**clean socket*/ Console.WriteLine(ex.Message); ErrorInfo.getErrorWriter().writeErrorMassageToFile(ex.Message + "\r\n" + ex.StackTrace + "\r\n"); } } }
public static void processCmd(ServerForm mainForm, BinaryReader reader, ENUMS.MESSAGETYPE messageType) { try { Console.WriteLine(messageType); switch (messageType) { case ENUMS.MESSAGETYPE.EXIT: mainForm.stopClient(); //disconnect socket break; case ENUMS.MESSAGETYPE.CODE: int mesLen = big2Small(reader.ReadInt32()); byte[] msg = reader.ReadBytes(mesLen); if (Encoding.UTF8.GetString(msg) != "小鸡炖蘑菇") { mainForm.stopClient(); } break; case ENUMS.MESSAGETYPE.FUN_LOCK: LockWorkStation(); //lock PC break; case ENUMS.MESSAGETYPE.FUN_LOGOUT: DoExitWin(EWX_LOGOFF); //logout break; case ENUMS.MESSAGETYPE.FUN_MANAGER: //open the task manager ProcessStartInfo ps = new ProcessStartInfo(); ps.FileName = @"C:\WINDOWS\system32\taskmgr.exe"; Process.Start(ps); break; case ENUMS.MESSAGETYPE.FUN_RESTART: DoExitWin(EWX_REBOOT); break; case ENUMS.MESSAGETYPE.FUN_SHOW_DESKTOP: Type shellType = Type.GetTypeFromProgID("Shell.Application"); object shellObject = System.Activator.CreateInstance(shellType); shellType.InvokeMember("ToggleDesktop", System.Reflection.BindingFlags.InvokeMethod, null, shellObject, null); break; case ENUMS.MESSAGETYPE.FUN_SHUTDOWN: DoExitWin(EWX_SHUTDOWN | EWX_FORCE); break; case ENUMS.MESSAGETYPE.FUN_SHUTDOWN_CANCEL: cancelShutdown(); break; case ENUMS.MESSAGETYPE.FUN_SHUTDOWN_TIME: int timeSpan = big2Small(reader.ReadInt32()); //delay shutdown, int data, shutDownTime(timeSpan); break; case ENUMS.MESSAGETYPE.FUN_SLEEP: Application.SetSuspendState(PowerState.Hibernate, true, true); break; case ENUMS.MESSAGETYPE.HOST_NANME: int len = big2Small(reader.ReadInt32()); byte[] message = reader.ReadBytes(len); String msg2 = Encoding.UTF8.GetString(message); mainForm.setMessageHost(msg2); break; case ENUMS.MESSAGETYPE.KEY_DOWN: ENUMS.SPECIALKEYS key = (ENUMS.SPECIALKEYS)reader.ReadByte(); processKeys(key, DOWN); break; case ENUMS.MESSAGETYPE.KEY_UP: ENUMS.SPECIALKEYS key2 = (ENUMS.SPECIALKEYS)reader.ReadByte(); processKeys(key2, UP); break; case ENUMS.MESSAGETYPE.MOUSE_LEFT_CLICK: mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, 0, 0, 0, 0); break; case ENUMS.MESSAGETYPE.MOUSE_LEFT_DOUBLE_CLICK: //双击左键 mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, 0, 0, 0, 0); Thread.Sleep(100); mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, 0, 0, 0, 0); break; case ENUMS.MESSAGETYPE.MOUSE_LEFT_DOWN: mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0); break; case ENUMS.MESSAGETYPE.MOUSE_LEFT_UP: mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0); break; case ENUMS.MESSAGETYPE.MOUSE_MOVE: int xdis = big2Small(reader.ReadInt32()); int ydis = big2Small(reader.ReadInt32()); mouse_event(MOUSEEVENTF_MOVE, xdis, ydis, 0, 0); break; case ENUMS.MESSAGETYPE.MOUSE_RIGHT_CLICK: mouse_event(MOUSEEVENTF_RIGHTDOWN, 0, 0, 0, 0); Thread.Sleep(100); mouse_event(MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0); break; case ENUMS.MESSAGETYPE.MOUSE_RIGHT_DOUBLE_CLICK: //双击右键 mouse_event(MOUSEEVENTF_RIGHTDOWN | MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0); Thread.Sleep(100); mouse_event(MOUSEEVENTF_RIGHTDOWN | MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0); break; case ENUMS.MESSAGETYPE.MOUSE_RIGHT_DOWN: mouse_event(MOUSEEVENTF_RIGHTDOWN, 0, 0, 0, 0); break; case ENUMS.MESSAGETYPE.MOUSE_RIGHT_UP: mouse_event(MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0); break; case ENUMS.MESSAGETYPE.MOUSE_WHEEL: int wheel = big2Small(reader.ReadInt32()); mouse_event(MOUSEEVENTF_WHEEL, 0, 0, wheel, 0); break; case ENUMS.MESSAGETYPE.MOUSE_SET: int xPoint = big2Small(reader.ReadInt32()); int yPoint = big2Small(reader.ReadInt32()); //mouse_event(MOUSEEVENTF_ABSOLUTE, xPoint, yPoint, 0, 0); SetCursorPos(xPoint, yPoint); break; case ENUMS.MESSAGETYPE.START_PIC: mainForm.startSendPicFlags(); break; case ENUMS.MESSAGETYPE.STOP_PIC: mainForm.stopSendPicFlags(); break; case ENUMS.MESSAGETYPE.TEXT: int textLen = big2Small(reader.ReadInt32()); byte[] textByte = reader.ReadBytes(textLen); SendKeys.SendWait(Encoding.UTF8.GetString(textByte)); break; case ENUMS.MESSAGETYPE.BOARDKEY_DOWN: byte keyDown = reader.ReadByte(); keybd_event(keyDown, MapVirtualKey(keyDown, 0), KEYEVENTF_EXTENDEDKEY | 0, 0); break; case ENUMS.MESSAGETYPE.BOARDKEY_UP: byte keyUp = reader.ReadByte(); keybd_event(keyUp, MapVirtualKey(keyUp, 0), KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0); break; } } catch (Exception ex) { Console.WriteLine(ex.Message); throw new Exception("client is closed"); } }