• C++服务器与java进行socket通信案例


     

     

    分类: 【java】

    注:本代码版权所有!!!转载时请声明源地址:http://blog.csdn.net/nuptboyzhb/article/details/8047619

    你可以学习,分享,修改,教学等。但是不得用于商业目的。目前已经发现互联网上大量与本文完全相同的文章,但是却把作者信息删除的干干净净,并且据为己有,打上某培训机构的广告!实属可恶!

    最新消息:项目成品连接:http://blog.csdn.net/nuptboyzhb/article/details/8611179

    (一)项目概述:
    C++服务器是之前编写好的,有对应的C++客户端。因此,服务器的C++代码不能改变。主要解决的问题是:
    1.如何用java类来还原服务器中的结构体
    2.数据之间的转换
    3.socket通信数据统一用字节数组。
    (二)首先看一下服务器的代码:(360安全卫士竟然说我的代码是木马...好吧,这个服务器不就是能联网,能获取本地数据么?确实有点像木马,但绝对不是!)
    /*主要功能是获得系统硬盘符号及硬盘下的目录和文件*/
    [C++ code]

    [cpp] view plaincopy
     
    1. // FileNetServer.cpp : Defines the entry point for the console application.  
    2. //  
    3.   
    4. #include "stdafx.h"  
    5. #include "FileNetServer.h"  
    6. #include <winsock.h>  
    7. #include <windows.h>  
    8. #include "SYS.H"  
    9.   
    10. #pragma comment(lib, "ws2_32")  
    11.   
    12. #ifdef _DEBUG  
    13. #define new DEBUG_NEW  
    14. #undef THIS_FILE  
    15. static char THIS_FILE[] = __FILE__;  
    16. #endif  
    17.   
    18.   
    19. typedef struct  
    20. {  
    21.     int ID;  
    22.     BYTE lparam[BUF_LEN*2];  
    23. }COMMAND;  
    24. /*BOOL 4byte HICON 4byte*/  
    25. typedef struct  
    26. {  
    27.     char FileName[MAX_PATH];//260byte  
    28.     int FileLen;  
    29.     char Time[50];  
    30.     BOOL IsDir;  
    31.     BOOL Error;  
    32.     HICON hIcon;  
    33. }FILEINFO;  
    34.   
    35.   
    36. BOOL DeleteDirectory(char *DirName);  
    37. BOOL CapScreen(LPTSTR FileName);  
    38.   
    39. DWORD WINAPI SLisen(LPVOID lparam);  
    40. DWORD GetDriverProc(COMMAND command, SOCKET client);  
    41. DWORD GetDirInfoProc(COMMAND command, SOCKET client);  
    42. DWORD ExecFileProc(COMMAND command, SOCKET client);  
    43. DWORD DelFileProc(COMMAND command, SOCKET client);  
    44. DWORD FileInfoProc(COMMAND command, SOCKET client);  
    45. DWORD CreateDirProc(COMMAND command, SOCKET client);  
    46. DWORD DelDirProc(COMMAND command, SOCKET client);  
    47. DWORD GetFileProc(COMMAND command, SOCKET client);  
    48. DWORD PutFileProc(COMMAND command, SOCKET client);  
    49. DWORD GetScreenProc(COMMAND command, SOCKET client);  
    50.   
    51. /////////////////////////////////////////////////////////////////////////////  
    52. // The one and only application object  
    53.   
    54. CWinApp theApp;  
    55.   
    56. using namespace std;  
    57.   
    58. int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])  
    59. {  
    60.   
    61.     WSADATA wsadata;  
    62.     SOCKET FileNetServer;  
    63.     SOCKET client;  
    64.     SOCKADDR_IN FileNetServeraddr;  
    65.     SOCKADDR_IN clientaddr;  
    66.     int port = 17329;  
    67.   
    68.     WORD ver = MAKEWORD(2,2);  
    69.     WSAStartup(ver, &wsadata);  
    70.   
    71.     FileNetServer = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);  
    72.     FileNetServeraddr.sin_family = AF_INET;  
    73.     FileNetServeraddr.sin_port = htons(port);  
    74.     FileNetServeraddr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);  
    75.   
    76.     bind(FileNetServer, (SOCKADDR*)&FileNetServeraddr, sizeof(FileNetServeraddr));  
    77.   
    78.     listen(FileNetServer, 5);  
    79.   
    80.     int len = sizeof(clientaddr);  
    81.     char s_password[100];  
    82.   
    83.     while(true)  
    84.     {  
    85.         if(client = accept(FileNetServer, (sockaddr*)&clientaddr, &len))  
    86.         {  
    87.   
    88.             if(send(client, "Password", sizeof("Password"), 0) != SOCKET_ERROR)  
    89.             {  
    90.                 cout<<"有客户请求连接,正在等待客户输入密码!";  
    91.             }  
    92. ag:         if(recv(client, s_password, sizeof(s_password), 0) != SOCKET_ERROR)  
    93.             {  
    94.                 if(strcmp(s_password, "123") == 0)  
    95.                 {  
    96.                     send(client, "OK", sizeof("OK"), 0);  
    97.                     cout<<"CreateThread is the OK  ";  
    98.                     CreateThread(NULL, NULL, SLisen, (LPVOID)client, NULL, NULL);  
    99.                 }  
    100.                 else  
    101.                 {  
    102.                     cout<<"有用户试图联入,但是未能输入正确密码!/n";  
    103.                     send(client, "NOOK", sizeof("NOOK"), 0);  
    104.                     goto ag;  
    105.                 }  
    106.             }  
    107.         }  
    108.     }  
    109.   
    110.     closesocket(FileNetServer);  
    111.     closesocket(client);  
    112.     WSACleanup();  
    113.   
    114.   
    115.   
    116.     return 0;  
    117. }  
    118.   
    119. DWORD WINAPI SLisen(LPVOID lparam)  
    120. {  
    121.     SOCKET client = (SOCKET)lparam;  
    122.   
    123.     COMMAND command;  
    124.   
    125.     while(1)  
    126.     {  
    127.         memset((char*)&command, 0, sizeof(command));  
    128.         if(recv(client, (char*)&command, sizeof(command), 0) == SOCKET_ERROR)  
    129.         {  
    130.             cout<<"The Client Socket is Closed ";  
    131.             break;  
    132.         }  
    133.         else  
    134.         {  
    135.             cout<<"The recv command is: ID="<<command.ID<<"  lparam="<<command.lparam<<endl;  
    136.             switch(command.ID)  
    137.             {  
    138.             case GetDriver:  
    139.                 GetDriverProc(command, client);  
    140.                 break;  
    141.             case GetDirInfo:  
    142.                 GetDirInfoProc(command, client);  
    143.                 break;  
    144.             case ExecFile:  
    145.                 ExecFileProc(command, client);  
    146.                 break;  
    147.             case DelFile:  
    148.                 DelFileProc(command, client);  
    149.                 break;  
    150.             case FileInfo:  
    151.                 FileInfoProc(command, client);  
    152.                 break;  
    153.             case CreateDir:  
    154.                 CreateDirProc(command, client);  
    155.                 break;  
    156.             case DelDir:  
    157.                 DelDirProc(command, client);  
    158.                 break;  
    159.             case GetFile:  
    160.                 GetFileProc(command, client);  
    161.                 break;  
    162.             case PutFile:  
    163.                 PutFileProc(command, client);  
    164.                 break;  
    165.             case GetScreen:  
    166.                 GetScreenProc(command, client);  
    167.                 break;  
    168.             default:  
    169.                 cout<<"Can not recongnize the command! ";  
    170.                 break;  
    171.             }  
    172.         }  
    173.     }  
    174.     closesocket(client);  
    175.     return 0;  
    176. }  
    177.   
    178. DWORD GetDriverProc(COMMAND command, SOCKET client)  
    179. {  
    180.     cout<<"GetDriver is ok ";  
    181.   
    182.     COMMAND cmd;  
    183.     memset((char *)&cmd, 0, sizeof(cmd));  
    184.     cmd.ID = GetDriver;  
    185.   
    186.     for(char i='A'; i<'Z'; i++)  
    187.     {  
    188.         char x[20] = {i, ':'};  
    189.   
    190.         UINT Type = GetDriveType(x);  
    191.   
    192.         if(Type==DRIVE_FIXED || Type==DRIVE_REMOVABLE || Type==DRIVE_CDROM)  
    193.         {  
    194.             cout<<x<<" ";  
    195.             memset((char*)cmd.lparam, 0, sizeof(cmd.lparam));  
    196.             strcpy((char*)cmd.lparam, x);  
    197.   
    198.             if(send(client, (char*)&cmd, sizeof(cmd), 0) == SOCKET_ERROR)  
    199.             {  
    200.                 cout<<"Send Driver is Error ";  
    201.             }  
    202.         }  
    203.     }  
    204.     return 0;  
    205. }  
    206.   
    207. DWORD GetDirInfoProc(COMMAND command, SOCKET client)  
    208. {  
    209.     cout<<"GetDir is Ok ";  
    210.   
    211.     FILEINFO fi;  
    212.     COMMAND cmd;  
    213.     memset((char*)&cmd, 0, sizeof(cmd));  
    214.     memset((char*)&fi, 0, sizeof(fi));  
    215.   
    216.     strcat((char*)command.lparam, "*.*");  
    217.     cout<<(char*)command.lparam<<" ";  
    218.   
    219.     CFileFind file;  
    220.     BOOL bContinue = file.FindFile((char*)command.lparam);  
    221.   
    222.     while(bContinue)  
    223.     {  
    224.         memset((char*)&cmd, 0, sizeof(cmd));  
    225.         memset((char*)&fi, 0, sizeof(fi));  
    226.   
    227.         bContinue = file.FindNextFile();  
    228.         if(file.IsDirectory())  
    229.         {  
    230.             fi.IsDir = true;  
    231.         }  
    232.         strcpy(fi.FileName, file.GetFileName().LockBuffer());  
    233.         cout<<fi.FileName<<" ";  
    234.   
    235.         cmd.ID = GetDirInfo;  
    236.         memcpy((char*)&cmd.lparam, (char*)&fi, sizeof(fi));  
    237.   
    238.         if(send(client, (char*)&cmd, sizeof(cmd), 0) == SOCKET_ERROR)  
    239.         {  
    240.             cout<<"Send Dir is Error ";  
    241.         }  
    242.     }  
    243.     return 0;  
    244. }  
    245.   
    246. DWORD ExecFileProc(COMMAND command, SOCKET client)  
    247. {  
    248.     return 0;  
    249. }  
    250.   
    251. DWORD DelFileProc(COMMAND command, SOCKET client)  
    252. {  
    253.     return 0;  
    254. }  
    255.   
    256. DWORD FileInfoProc(COMMAND command, SOCKET client)  
    257. {  
    258.     return 0;  
    259. }  
    260.   
    261. DWORD CreateDirProc(COMMAND command, SOCKET client)  
    262. {  
    263.     return 0;  
    264. }  
    265.   
    266. DWORD DelDirProc(COMMAND command, SOCKET client)  
    267. {  
    268.     return 0;  
    269. }  
    270.   
    271. BOOL DeleteDirectory(char *DirName)  
    272. {  
    273.     return 0;  
    274. }  
    275.   
    276. DWORD GetFileProc(COMMAND command, SOCKET client)  
    277. {  
    278.     return 0;  
    279. }  
    280.   
    281. DWORD PutFileProc(COMMAND command, SOCKET client)  
    282. {  
    283.       
    284.     return 0;  
    285. }  
    286.   
    287. DWORD GetScreenProc(COMMAND command, SOCKET client)  
    288. {  
    289.       
    290.     return 0;  
    291. }  
    292.   
    293. BOOL CapScreen(LPTSTR FileName)  
    294. {  
    295.     return 0;  
    296. }  


    (三)最主要的是客户端如何编写:
    当然,编程流程和博客[http://blog.csdn.net/nuptboyzhb/article/details/8041715]是一样的。主要有一下几个类:
    1.Client.java //还有main函数的类,你们都知道它是功能。

    [java] view plaincopy
     
    1. /* 
    2.  *@author: ZhengHaibo   
    3.  *web:     blog.csdn.net/nuptboyzhb 
    4.  *mail:    zhb931706659@126.com 
    5.  *2012-9-23  Nanjing njupt 
    6.  */  
    7. import java.io.IOException;  
    8. import java.net.InetSocketAddress;  
    9. import java.net.Socket;  
    10. public class Client {  
    11.     NetDataTypeTransform mNetDataTypeTransform=new NetDataTypeTransform();  
    12.     private static final String IP="127.0.0.1";  
    13.     private static final int NetPort=17329;  
    14.     private Socket sock;  
    15.     public Client(){  
    16.         try {  
    17.             onCreate();  
    18.         } catch (IOException e) {  
    19.             // TODO Auto-generated catch block  
    20.             e.printStackTrace();  
    21.         }  
    22.     }  
    23.     public void onCreate() throws IOException{  
    24.         InetSocketAddress addr = new InetSocketAddress(IP,NetPort); //创建socket  
    25.         sock = new Socket();  
    26.         sock.connect(addr);//连接服务器  
    27.         byte []receive=new byte[9];  
    28.         sock.getInputStream().read(receive);  
    29.         String tempString=mNetDataTypeTransform.ByteArraytoString(receive, receive.length);  
    30.         System.out.println("  Server said:send your "+tempString);  
    31.         if(tempString.equals("Password")){  
    32.             System.out.println("I can send password 123!");  
    33.         }  
    34.         String password="123";//注意,别忘了‘’  
    35.         sock.getOutputStream().write(mNetDataTypeTransform.StringToByteArray(password));  
    36.         byte []isOk=new byte[3];  
    37.         sock.getInputStream().read(isOk);  
    38.         String okString=mNetDataTypeTransform.ByteArraytoString(isOk,isOk.length);  
    39.         System.out.println("  ----- is ok?--"+okString);  
    40.         if(okString.equals("OK")){  
    41.             System.out.println("new Thread begin...");  
    42.             NetDataCommand commd=new NetDataCommand(1,"E:");  
    43.             sock.getOutputStream().write(commd.getByteArrayData());  
    44.             ThreadRead mThreadRead=new ThreadRead(sock,this);  
    45.             mThreadRead.start();//启动监听线程。  
    46.         }  
    47.         //////////////////////////////////////////////////////////////  
    48.         try {  
    49.             Thread.sleep(30000);  
    50.         } catch (InterruptedException e) {  
    51.             // TODO Auto-generated catch block  
    52.             e.printStackTrace();  
    53.         }  
    54.     }  
    55.     public static void main(String [] args) throws InterruptedException, IOException  
    56.     {  
    57.         new Client();  
    58.     }  
    59.     public void GetDriverPro(Socket mSocket,NetDataCommand mCommand){  
    60.         System.out.println("command ID="+mCommand.getID()+"--"+"command Lparam="+mCommand.getLparam());  
    61.         NetDataCommand commd=new NetDataCommand(2,mCommand.getLparam()+"\");  
    62.         try {  
    63.             mSocket.getOutputStream().write(commd.getByteArrayData());  
    64.         } catch (IOException e){  
    65.             // TODO Auto-generated catch block  
    66.             e.printStackTrace();  
    67.         }  
    68.     }  
    69.     public void GetDirInfoPro(Socket mSocket,NetDataCommand mCommand){  
    70.         System.out.println("command ID="+mCommand.getID()+"command Lparam="+mCommand.getLparam());  
    71.     }  
    72.     public void ExecFilePro(Socket mSocket,NetDataCommand mCommand){  
    73.         System.out.println("command ID="+mCommand.getID()+"command Lparam="+mCommand.getLparam());  
    74.     }  
    75.     public void DelFilePro(Socket mSocket,NetDataCommand mCommand){  
    76.         System.out.println("command ID="+mCommand.getID()+"command Lparam="+mCommand.getLparam());  
    77.           
    78.     }  
    79.     public void FileInfoPro(Socket mSocket,NetDataCommand mCommand){  
    80.         System.out.println("command ID="+mCommand.getID()+"command Lparam="+mCommand.getLparam());  
    81.     }  
    82.     public void CreateDirPro(Socket mSocket,NetDataCommand mCommand){  
    83.         System.out.println("command ID="+mCommand.getID()+"command Lparam="+mCommand.getLparam());  
    84.     }  
    85.     public void GetFilePro(Socket mSocket,NetDataCommand mCommand){  
    86.         System.out.println("command ID="+mCommand.getID()+"command Lparam="+mCommand.getLparam());  
    87.     }  
    88.     public void PutFilePro(Socket mSocket,NetDataCommand mCommand){  
    89.         System.out.println("command ID="+mCommand.getID()+"command Lparam="+mCommand.getLparam());  
    90.     }  
    91.     public void GetScreenPro(Socket mSocket,NetDataCommand mCommand){  
    92.         System.out.println("command ID="+mCommand.getID()+"command Lparam="+mCommand.getLparam());  
    93.     }  
    94. }  

    2.NetDataTypeTransform.java//顾名思义:数据转换的类

    [java] view plaincopy
     
    1. import java.io.UnsupportedEncodingException;  
    2.   
    3. /* 
    4.  *@author: ZhengHaibo   
    5.  *web:     blog.csdn.net/nuptboyzhb 
    6.  *mail:    zhb931706659@126.com 
    7.  *2012-9-25  Nanjing njupt 
    8.  */  
    9. public class NetDataTypeTransform {  
    10.     public static final String coding="GB2312"; //全局定义,以适应系统其他部分  
    11.     public NetDataTypeTransform(){  
    12.           
    13.     }  
    14.     /** 
    15.      * 将int转为低字节在前,高字节在后的byte数组 
    16.      */  
    17.     public byte[] IntToByteArray(int n) {  
    18.         byte[] b = new byte[4];  
    19.         b[0] = (byte) (n & 0xff);  
    20.         b[1] = (byte) (n >> 8 & 0xff);  
    21.         b[2] = (byte) (n >> 16 & 0xff);  
    22.         b[3] = (byte) (n >> 24 & 0xff);  
    23.         return b;  
    24.     }  
    25.     /** 
    26.      * byte数组转化为int 
    27.      * 将低字节在前转为int,高字节在后的byte数组 
    28.      */  
    29.     public int ByteArrayToInt(byte[] bArr) {  
    30.          if(bArr.length!=4){  
    31.              return -1;  
    32.          }  
    33.          return (int) ((((bArr[3] & 0xff) << 24)    
    34.                     | ((bArr[2] & 0xff) << 16)    
    35.                     | ((bArr[1] & 0xff) << 8) | ((bArr[0] & 0xff) << 0)));   
    36.     }  
    37.     /** 
    38.      * 将byte数组转化成String,为了支持中文,转化时用GBK编码方式 
    39.      */  
    40.     public String ByteArraytoString(byte[] valArr,int maxLen) {  
    41.         String result=null;  
    42.         int index = 0;  
    43.         while(index < valArr.length && index < maxLen) {  
    44.             if(valArr[index] == 0) {  
    45.                 break;  
    46.             }  
    47.             index++;  
    48.         }  
    49.         byte[] temp = new byte[index];  
    50.         System.arraycopy(valArr, 0, temp, 0, index);  
    51.         try {  
    52.             result= new String(temp,"GBK");  
    53.         } catch (UnsupportedEncodingException e) {  
    54.             e.printStackTrace();  
    55.         }  
    56.         return result;  
    57.     }  
    58.     /** 
    59.      * 将String转化为byte,为了支持中文,转化时用GBK编码方式 
    60.      */  
    61.     public byte[] StringToByteArray(String str){  
    62.         byte[] temp = null;  
    63.         try {  
    64.             temp = str.getBytes("GBK");  
    65.         } catch (UnsupportedEncodingException e) {  
    66.             // TODO Auto-generated catch block  
    67.             e.printStackTrace();  
    68.         }  
    69.         return temp;  
    70.     }  
    71. }  

    3.NetDataCommand.java//该类就是实现与C++服务器中COMMMAND结构体对应的java类

    [java] view plaincopy
     
    1. /* 
    2.  *@author: ZhengHaibo   
    3.  *web:     blog.csdn.net/nuptboyzhb 
    4.  *mail:    zhb931706659@126.com 
    5.  *2012-9-26  Nanjing njupt 
    6.  */  
    7. public class NetDataCommand {  
    8.     private static final int IDLen=4;  
    9.     private static final int LparamLen=2048;  
    10.     private static final int CommandLen=2052;  
    11.     public byte []byteArrayData=new byte[CommandLen];  
    12.     private int ID;  
    13.     private String lparam;  
    14.     private NetDataTypeTransform mDataTypeTransform=new NetDataTypeTransform();;  
    15.     public byte[] getByteArrayData(){  
    16.         return byteArrayData;  
    17.     }  
    18.     public NetDataCommand(){  
    19.           
    20.     }  
    21.     public NetDataCommand(int ID,String lparam) {  
    22.         // TODO Auto-generated constructor stub  
    23.           
    24.         this.ID=ID;  
    25.         this.lparam=lparam;  
    26.         byte[] IDbyte = mDataTypeTransform.IntToByteArray(ID);  
    27.         System.arraycopy(IDbyte,0, byteArrayData, 0, IDbyte.length);  
    28.         byte[] Strbyte = mDataTypeTransform.StringToByteArray(lparam);  
    29.         System.arraycopy(Strbyte,0,byteArrayData,IDbyte.length,Strbyte.length);  
    30.     }  
    31.     public NetDataCommand(byte[] dataArray){  
    32.         int id=1;  
    33.         String lpString="";  
    34.         System.arraycopy(dataArray,0, byteArrayData,0,CommandLen);  
    35.         byte[] forIntID = new byte[IDLen];  
    36.         System.arraycopy(dataArray,0,forIntID,0,forIntID.length);  
    37.         id=mDataTypeTransform.ByteArrayToInt(forIntID);  
    38.         byte[] StrTemp=new byte[LparamLen];  
    39.         System.arraycopy(dataArray,IDLen,StrTemp,0,StrTemp.length);  
    40.         lpString=mDataTypeTransform.ByteArraytoString(StrTemp, StrTemp.length);  
    41.         //lpString=StrTemp.toString();  
    42.         ID=id;  
    43.         lparam=lpString;  
    44.     }  
    45.     public int getID(){  
    46.         return ID;  
    47.     }  
    48.     public String getLparam(){  
    49.         return lparam;  
    50.     }  
    51.     public void setID(int id) {  
    52.         this.ID=id;  
    53.     }  
    54.     public void setLparam(String str){  
    55.         this.lparam=str;  
    56.     }  
    57.       
    58. }  


     

    4.ThreadRead.java//线程,用于一直接收数据。

    [java] view plaincopy
     
    1. /* 
    2.  *@author: ZhengHaibo   
    3.  *web:     blog.csdn.net/nuptboyzhb 
    4.  *mail:    zhb931706659@126.com 
    5.  *2012-9-26  Nanjing njupt 
    6.  */  
    7. import java.io.IOException;  
    8. import java.lang.Thread;  
    9. import java.net.Socket;  
    10. public class ThreadRead extends Thread{  
    11.     public Socket mSocket;  
    12.     public Client mClient;  
    13.     private static final int GetDriver=0x01;  
    14.     private static final int GetDirInfo=0x02;  
    15.     private static final int ExecFile=0x03;  
    16.     private static final int GetFile=0x04;  
    17.     private static final int PutFile=0x05;  
    18.     private static final int DelFile=0x06;  
    19.     private static final int DelDir =0x07;  
    20.     private static final int CreateDir=0x08;  
    21.     private static final int FileInfo=0x09;  
    22.     private static final int GetScreen=0x10;  
    23.     private static final int CommandLen=2052;  
    24.     private static int TryTimes=5;  
    25.     private byte []byteArrayData=new byte[CommandLen];  
    26.     public ThreadRead(Socket lpSocket,Client mClient) {  
    27.         // TODO Auto-generated constructor stub  
    28.         this.mSocket=lpSocket;  
    29.         this.mClient=mClient;  
    30.     }  
    31.       
    32.     public void run() {  
    33.         while (TryTimes>0) {  
    34.             while (true) {  
    35.                 try {  
    36.                     mSocket.getInputStream().read(byteArrayData);  
    37.                     NetDataCommand mCommand = new NetDataCommand(byteArrayData);  
    38.                     switch (mCommand.getID()){  
    39.                     case GetDriver:  
    40.                         mClient.GetDriverPro(mSocket, mCommand);  
    41.                         break;  
    42.                     case GetDirInfo:  
    43.                         mClient.GetDirInfoPro(mSocket, mCommand);  
    44.                         break;  
    45.                     case ExecFile:  
    46.                         mClient.ExecFilePro(mSocket, mCommand);  
    47.                         break;  
    48.                     case DelFile:  
    49.                         mClient.DelFilePro(mSocket, mCommand);  
    50.                         break;  
    51.                     case FileInfo:  
    52.                         mClient.FileInfoPro(mSocket, mCommand);  
    53.                         break;  
    54.                     case CreateDir:  
    55.                         mClient.CreateDirPro(mSocket, mCommand);  
    56.                         break;  
    57.                     case DelDir:  
    58.                         mClient.DelFilePro(mSocket, mCommand);  
    59.                         break;  
    60.                     case GetFile:  
    61.                         mClient.GetFilePro(mSocket, mCommand);  
    62.                         break;  
    63.                     case PutFile:  
    64.                         mClient.PutFilePro(mSocket, mCommand);  
    65.                         break;  
    66.                     case GetScreen:  
    67.                         mClient.GetScreenPro(mSocket, mCommand);  
    68.                         break;  
    69.                     default:  
    70.                         System.out.println("----------wrong!!!--------------");  
    71.                         break;  
    72.                     }  
    73.   
    74.                 } catch (IOException e) {  
    75.                     // TODO Auto-generated catch block  
    76.                     e.printStackTrace();  
    77.                     TryTimes--;  
    78.                     break;  
    79.                 }  
    80.             }  
    81.         }  
    82.     }  
    83. }  


     

    (四)实现结果
    项目源码:http://download.csdn.net/detail/nuptboyzhb/4624574
    先运行服务器,再运行java客户端代码。实验结果如下:(当然,这是我电脑下的文件夹和文件(隐私暴漏了...))
    运行服务器的时候,我真的想告诉360安全卫士,这不是木马...
    Eclipse的控制台:

    [plain] view plaincopy
     
    1.   Server said:send your Password  
    2. I can send password 123  
    3. ----- is ok?--OK  
    4. new Thread begin...  
    5. command ID=1--command Lparam=C:  
    6. command ID=1--command Lparam=D:  
    7. command ID=1--command Lparam=E:  
    8. command ID=1--command Lparam=F:  
    9. command ID=1--command Lparam=G:  
    10. command ID=2command Lparam=$Recycle.Bin  
    11. command ID=2command Lparam=.rnd  
    12. command ID=2command Lparam=360Rec  
    13. command ID=2command Lparam=360SANDBOX  
    14. command ID=2command Lparam=9c3e42423a202668d396d3be5e  
    15. command ID=2command Lparam=autoexec.bat  
    16. command ID=2command Lparam=bar.emf  
    17. command ID=2command Lparam=config.sys  
    18. command ID=2command Lparam=cygwin  
    19. command ID=2command Lparam=Documents and Settings  
    20. command ID=2command Lparam=hiberfil.sys  
    21. command ID=2command Lparam=IO.SYS  
    22. command ID=2command Lparam=MSDOS.SYS  
    23. command ID=2command Lparam=MSOCache  
    24. command ID=2command Lparam=pagefile.sys  
    25. command ID=2command Lparam=PerfLogs  
    26. command ID=2command Lparam=Program Files  
    27. command ID=2command Lparam=ProgramData  
    28. command ID=2command Lparam=Recovery  
    29. command ID=2command Lparam=System Volume Information  
    30. command ID=2command Lparam=Users  
    31. command ID=2command Lparam=Windows  
    32. command ID=2command Lparam=$RECYCLE.BIN  
    33. command ID=2command Lparam=eclipse  
    34. command ID=2command Lparam=HelloJNI  
    35. command ID=2command Lparam=System Volume Information  
    36. command ID=2command Lparam=大学部分资料  
    37. command ID=2command Lparam=文件鱼龙混杂  
    38. command ID=2command Lparam=照片和视频  
    39. command ID=2command Lparam=研究方向  
    40. command ID=2command Lparam=研究生学习  
    41. command ID=2command Lparam=程序语言  
    42. command ID=2command Lparam=软件安装包  
    43. command ID=2command Lparam=$RECYCLE.BIN  
    44. command ID=2command Lparam=360  
    45. command ID=2command Lparam=360Downloads  
    46. command ID=2command Lparam=360Rec  
    47. command ID=2command Lparam=360云盘  
    48. command ID=2command Lparam=360驱动大师目录  
    49. command ID=2command Lparam=61ffd6de5ad141016097  
    50. command ID=2command Lparam=android-sdk-windows  
    51. command ID=2command Lparam=CSDN_ExportBlog  
    52. command ID=2command Lparam=eclipse  
    53. command ID=2command Lparam=EditPlus  
    54. command ID=2command Lparam=Fetion2012  
    55. command ID=2command Lparam=FlashFXP_4.2.4.1785  
    56. command ID=2command Lparam=JDK1_6  
    57. command ID=2command Lparam=kankan  
    58. command ID=2command Lparam=KMPlayer  
    59. command ID=2command Lparam=KSafeRecycle  
    60. command ID=2command Lparam=Kugou  
    61. command ID=2command Lparam=KuGouCache  
    62. command ID=2command Lparam=matlab2009a  
    63. command ID=2command Lparam=msdn6_0  
    64. command ID=2command Lparam=MSOCache  
    65. command ID=2command Lparam=MySQL Tools  
    66. command ID=2command Lparam=PDF_Reader  
    67. command ID=2command Lparam=PHPEclipse  
    68. command ID=2command Lparam=Program Files  
    69. command ID=2command Lparam=ps3  
    70. command ID=2command Lparam=Python27  
    71. command ID=2command Lparam=QQ  
    72. command ID=2command Lparam=QQGame  
    73. command ID=2command Lparam=sogou  
    74. command ID=2command Lparam=System Volume Information  
    75. command ID=2command Lparam=TDDOWNLOAD  
    76. command ID=2command Lparam=Ubuntu  
    77. command ID=2command Lparam=vc2008  
    78. command ID=2command Lparam=vc6_0  
    79. command ID=2command Lparam=VC98  
    80. command ID=2command Lparam=Video  
    81. command ID=2command Lparam=VMware  
    82. command ID=2command Lparam=WAMP5  
    83. command ID=2command Lparam=WindowsManagerTools  
    84. command ID=2command Lparam=youku  
    85. command ID=2command Lparam=光影看看  
    86. command ID=2command Lparam=快捷方式  
    87. command ID=2command Lparam=有道  
    88. command ID=2command Lparam=迅雷7  


     

    服务器的显示:

     
     
  • 相关阅读:
    关于软件工程是不是教那些不会写程序的人开发软件的一些看法。
    学习这门课的一些问题
    软件测试的平台
    课程上不明白的问题
    目前流行的源程序版本管理软件和项目管理软件都有哪些, 各有什么优缺点?
    自我介绍
    【软件工程】提问回顾与个人总结
    Google Kick Start 2019 C轮 第一题 Wiggle Walk 题解
    elasticsearch-py 解决 too_long_frame_exception 问题
    Redis集群学习笔记
  • 原文地址:https://www.cnblogs.com/u0mo5/p/4168477.html
Copyright © 2020-2023  润新知