C++服務器與java進行socket通信案例

(一)項目概述:
C++服務器是之前編寫好的,有對應的C++客戶端。因此,服務器的C++代碼不能改變。主要解決的問題是:
1.如何用java類來還原服務器中的結構體
2.數據之間的轉換
3.socket通信數據統一用字節數組。
(二)首先看一下服務器的代碼:(360安全衛士竟然說我的代碼是木馬...好吧,這個服務器不就是能聯網,能獲取本地數據麼?確實有點像木馬,但絕對不是!)
/*主要功能是獲得系統硬盤符號及硬盤下的目錄和文件*/
[C++ code]


  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 \n";  
  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\n";  
  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!\n";  
  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\n";  
  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<<"\n";  
  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\n";  
  201.             }  
  202.         }  
  203.     }  
  204.     return 0;  
  205. }  
  206.   
  207. DWORD GetDirInfoProc(COMMAND command, SOCKET client)  
  208. {  
  209.     cout<<"GetDir is Ok\n";  
  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<<"\n";  
  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<<"\n";  
  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\n";  
  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. }  
// FileNetServer.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "FileNetServer.h"
#include <winsock.h>
#include <windows.h>
#include "SYS.H"

#pragma comment(lib, "ws2_32")

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif


typedef struct
{
	int ID;
	BYTE lparam[BUF_LEN*2];
}COMMAND;
/*BOOL 4byte HICON 4byte*/
typedef struct
{
	char FileName[MAX_PATH];//260byte
	int FileLen;
	char Time[50];
	BOOL IsDir;
	BOOL Error;
	HICON hIcon;
}FILEINFO;


BOOL DeleteDirectory(char *DirName);
BOOL CapScreen(LPTSTR FileName);

DWORD WINAPI SLisen(LPVOID lparam);
DWORD GetDriverProc(COMMAND command, SOCKET client);
DWORD GetDirInfoProc(COMMAND command, SOCKET client);
DWORD ExecFileProc(COMMAND command, SOCKET client);
DWORD DelFileProc(COMMAND command, SOCKET client);
DWORD FileInfoProc(COMMAND command, SOCKET client);
DWORD CreateDirProc(COMMAND command, SOCKET client);
DWORD DelDirProc(COMMAND command, SOCKET client);
DWORD GetFileProc(COMMAND command, SOCKET client);
DWORD PutFileProc(COMMAND command, SOCKET client);
DWORD GetScreenProc(COMMAND command, SOCKET client);

/////////////////////////////////////////////////////////////////////////////
// The one and only application object

CWinApp theApp;

using namespace std;

int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{

	WSADATA wsadata;
	SOCKET FileNetServer;
	SOCKET client;
	SOCKADDR_IN FileNetServeraddr;
	SOCKADDR_IN clientaddr;
	int port = 17329;

	WORD ver = MAKEWORD(2,2);
	WSAStartup(ver, &wsadata);

	FileNetServer = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
	FileNetServeraddr.sin_family = AF_INET;
	FileNetServeraddr.sin_port = htons(port);
	FileNetServeraddr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);

	bind(FileNetServer, (SOCKADDR*)&FileNetServeraddr, sizeof(FileNetServeraddr));

	listen(FileNetServer, 5);

	int len = sizeof(clientaddr);
	char s_password[100];

	while(true)
	{
		if(client = accept(FileNetServer, (sockaddr*)&clientaddr, &len))
		{

			if(send(client, "Password", sizeof("Password"), 0) != SOCKET_ERROR)
			{
				cout<<"有客戶請求連接,正在等待客戶輸入密碼!";
			}
ag:         if(recv(client, s_password, sizeof(s_password), 0) != SOCKET_ERROR)
			{
				if(strcmp(s_password, "123") == 0)
				{
					send(client, "OK", sizeof("OK"), 0);
                    cout<<"CreateThread is the OK \n";
			        CreateThread(NULL, NULL, SLisen, (LPVOID)client, NULL, NULL);
				}
				else
				{
					cout<<"有用戶試圖聯入,但是未能輸入正確密碼!/n";
					send(client, "NOOK", sizeof("NOOK"), 0);
					goto ag;
				}
			}
		}
	}

	closesocket(FileNetServer);
	closesocket(client);
	WSACleanup();



	return 0;
}

DWORD WINAPI SLisen(LPVOID lparam)
{
	SOCKET client = (SOCKET)lparam;

	COMMAND command;

	while(1)
	{
		memset((char*)&command, 0, sizeof(command));
		if(recv(client, (char*)&command, sizeof(command), 0) == SOCKET_ERROR)
		{
			cout<<"The Client Socket is Closed\n";
			break;
		}
		else
		{
			cout<<"The recv command is: ID="<<command.ID<<"  lparam="<<command.lparam<<endl;
			switch(command.ID)
			{
			case GetDriver:
				GetDriverProc(command, client);
				break;
			case GetDirInfo:
				GetDirInfoProc(command, client);
				break;
			case ExecFile:
				ExecFileProc(command, client);
				break;
			case DelFile:
				DelFileProc(command, client);
				break;
			case FileInfo:
				FileInfoProc(command, client);
				break;
			case CreateDir:
				CreateDirProc(command, client);
				break;
			case DelDir:
				DelDirProc(command, client);
				break;
			case GetFile:
				GetFileProc(command, client);
				break;
			case PutFile:
				PutFileProc(command, client);
				break;
			case GetScreen:
				GetScreenProc(command, client);
				break;
		    default:
				cout<<"Can not recongnize the command!\n";
				break;
			}
		}
	}
	closesocket(client);
	return 0;
}

DWORD GetDriverProc(COMMAND command, SOCKET client)
{
	cout<<"GetDriver is ok\n";

	COMMAND cmd;
	memset((char *)&cmd, 0, sizeof(cmd));
	cmd.ID = GetDriver;

	for(char i='A'; i<'Z'; i++)
	{
		char x[20] = {i, ':'};

		UINT Type = GetDriveType(x);

		if(Type==DRIVE_FIXED || Type==DRIVE_REMOVABLE || Type==DRIVE_CDROM)
		{
			cout<<x<<"\n";
			memset((char*)cmd.lparam, 0, sizeof(cmd.lparam));
			strcpy((char*)cmd.lparam, x);

			if(send(client, (char*)&cmd, sizeof(cmd), 0) == SOCKET_ERROR)
			{
				cout<<"Send Driver is Error\n";
			}
		}
	}
	return 0;
}

DWORD GetDirInfoProc(COMMAND command, SOCKET client)
{
	cout<<"GetDir is Ok\n";

	FILEINFO fi;
	COMMAND cmd;
	memset((char*)&cmd, 0, sizeof(cmd));
	memset((char*)&fi, 0, sizeof(fi));

	strcat((char*)command.lparam, "*.*");
	cout<<(char*)command.lparam<<"\n";

	CFileFind file;
	BOOL bContinue = file.FindFile((char*)command.lparam);

	while(bContinue)
	{
		memset((char*)&cmd, 0, sizeof(cmd));
		memset((char*)&fi, 0, sizeof(fi));

		bContinue = file.FindNextFile();
		if(file.IsDirectory())
		{
			fi.IsDir = true;
		}
		strcpy(fi.FileName, file.GetFileName().LockBuffer());
		cout<<fi.FileName<<"\n";

		cmd.ID = GetDirInfo;
		memcpy((char*)&cmd.lparam, (char*)&fi, sizeof(fi));

		if(send(client, (char*)&cmd, sizeof(cmd), 0) == SOCKET_ERROR)
		{
			cout<<"Send Dir is Error\n";
		}
	}
	return 0;
}

DWORD ExecFileProc(COMMAND command, SOCKET client)
{
	return 0;
}

DWORD DelFileProc(COMMAND command, SOCKET client)
{
	return 0;
}

DWORD FileInfoProc(COMMAND command, SOCKET client)
{
	return 0;
}

DWORD CreateDirProc(COMMAND command, SOCKET client)
{
	return 0;
}

DWORD DelDirProc(COMMAND command, SOCKET client)
{
	return 0;
}

BOOL DeleteDirectory(char *DirName)
{
	return 0;
}

DWORD GetFileProc(COMMAND command, SOCKET client)
{
	return 0;
}

DWORD PutFileProc(COMMAND command, SOCKET client)
{
	
	return 0;
}

DWORD GetScreenProc(COMMAND command, SOCKET client)
{
	
	return 0;
}

BOOL CapScreen(LPTSTR FileName)
{
	return 0;
}


(三)最主要的是客戶端如何編寫:
當然,編程流程和博客[http://blog.csdn.net/nuptboyzhb/article/details/8041715]是一樣的。主要有一下幾個類:
1.Client.java //還有main函數的類,你們都知道它是功能。

  1. /* 
  2.  *@author: ZhengHaibo   
  3.  *web:     blog.csdn.net/nuptboyzhb 
  4.  *mail:    [email protected] 
  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\0!");  
  33.         }  
  34.         String password="123\0";//注意,別忘了‘\0’   
  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:\0");  
  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()+"\\\0");  
  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. }  
/*
 *@author: ZhengHaibo  
 *web:     blog.csdn.net/nuptboyzhb
 *mail:    [email protected]
 *2012-9-23  Nanjing njupt
 */
import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.Socket;
public class Client {
    NetDataTypeTransform mNetDataTypeTransform=new NetDataTypeTransform();
	private static final String IP="127.0.0.1";
	private static final int NetPort=17329;
	private Socket sock;
	public Client(){
		try {
			onCreate();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	public void onCreate() throws IOException{
		InetSocketAddress addr = new InetSocketAddress(IP,NetPort); //創建socket
		sock = new Socket();
		sock.connect(addr);//連接服務器
		byte []receive=new byte[9];
		sock.getInputStream().read(receive);
		String tempString=mNetDataTypeTransform.ByteArraytoString(receive, receive.length);
		System.out.println("  Server said:send your "+tempString);
		if(tempString.equals("Password")){
			System.out.println("I can send password 123\0!");
		}
		String password="123\0";//注意,別忘了‘\0’
		sock.getOutputStream().write(mNetDataTypeTransform.StringToByteArray(password));
		byte []isOk=new byte[3];
		sock.getInputStream().read(isOk);
		String okString=mNetDataTypeTransform.ByteArraytoString(isOk,isOk.length);
		System.out.println("  ----- is ok?--"+okString);
		if(okString.equals("OK")){
			System.out.println("new Thread begin...");
			NetDataCommand commd=new NetDataCommand(1,"E:\0");
			sock.getOutputStream().write(commd.getByteArrayData());
			ThreadRead mThreadRead=new ThreadRead(sock,this);
			mThreadRead.start();//啓動監聽線程。
		}
		//////////////////////////////////////////////////////////////
		try {
			Thread.sleep(30000);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
    public static void main(String [] args) throws InterruptedException, IOException
	{
    	new Client();
	}
    public void GetDriverPro(Socket mSocket,NetDataCommand mCommand){
    	System.out.println("command ID="+mCommand.getID()+"--"+"command Lparam="+mCommand.getLparam());
    	NetDataCommand commd=new NetDataCommand(2,mCommand.getLparam()+"\\\0");
    	try {
			mSocket.getOutputStream().write(commd.getByteArrayData());
		} catch (IOException e){
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
    }
    public void GetDirInfoPro(Socket mSocket,NetDataCommand mCommand){
    	System.out.println("command ID="+mCommand.getID()+"command Lparam="+mCommand.getLparam());
    }
    public void ExecFilePro(Socket mSocket,NetDataCommand mCommand){
    	System.out.println("command ID="+mCommand.getID()+"command Lparam="+mCommand.getLparam());
    }
    public void DelFilePro(Socket mSocket,NetDataCommand mCommand){
    	System.out.println("command ID="+mCommand.getID()+"command Lparam="+mCommand.getLparam());
    	
    }
    public void FileInfoPro(Socket mSocket,NetDataCommand mCommand){
    	System.out.println("command ID="+mCommand.getID()+"command Lparam="+mCommand.getLparam());
    }
    public void CreateDirPro(Socket mSocket,NetDataCommand mCommand){
    	System.out.println("command ID="+mCommand.getID()+"command Lparam="+mCommand.getLparam());
    }
    public void GetFilePro(Socket mSocket,NetDataCommand mCommand){
    	System.out.println("command ID="+mCommand.getID()+"command Lparam="+mCommand.getLparam());
    }
    public void PutFilePro(Socket mSocket,NetDataCommand mCommand){
    	System.out.println("command ID="+mCommand.getID()+"command Lparam="+mCommand.getLparam());
    }
    public void GetScreenPro(Socket mSocket,NetDataCommand mCommand){
    	System.out.println("command ID="+mCommand.getID()+"command Lparam="+mCommand.getLparam());
    }
}


2.NetDataTypeTransform.java//顧名思義:數據轉換的類

  1. import java.io.UnsupportedEncodingException;  
  2.   
  3. /* 
  4.  *@author: ZhengHaibo 
  5.  *web:     blog.csdn.net/nuptboyzhb 
  6.  *mail:    [email protected] 
  7.  *2012-9-25  Nanjing njupt 
  8.  */  
  9. public class NetDataTypeTransform {  
  10.     public NetDataTypeTransform(){  
  11.           
  12.     }  
  13.     /** 
  14.      * 將int轉爲低字節在前,高字節在後的byte數組 
  15.      */  
  16.     public byte[] IntToByteArray(int n) {  
  17.         byte[] b = new byte[4];  
  18.         b[0] = (byte) (n & 0xff);  
  19.         b[1] = (byte) (n >> 8 & 0xff);  
  20.         b[2] = (byte) (n >> 16 & 0xff);  
  21.         b[3] = (byte) (n >> 24 & 0xff);  
  22.         return b;  
  23.     }  
  24.     /** 
  25.      * byte數組轉化爲int 
  26.      * 將低字節在前轉爲int,高字節在後的byte數組 
  27.      */  
  28.     public int ByteArrayToInt(byte[] bArr) {  
  29.         int n = 0;  
  30.         for(int i=0;i<bArr.length&&i<4;i++){  
  31.             int left = i*8;  
  32.             n+= (bArr[i] << left);  
  33.         }  
  34.         return n;  
  35.     }  
  36.     /** 
  37.      * 將byte數組轉化成String 
  38.      */  
  39.     public String ByteArraytoString(byte[] valArr,int maxLen) {  
  40.         String result=null;  
  41.         int index = 0;  
  42.         while(index < valArr.length && index < maxLen) {  
  43.             if(valArr[index] == 0) {  
  44.                 break;  
  45.             }  
  46.             index++;  
  47.         }  
  48.         byte[] temp = new byte[index];  
  49.         System.arraycopy(valArr, 0, temp, 0, index);  
  50.         try {  
  51.             result= new String(temp,"GBK");  
  52.         } catch (UnsupportedEncodingException e) {  
  53.             e.printStackTrace();  
  54.         }  
  55.         return result;  
  56.     }  
  57.     public byte[] StringToByteArray(String str){  
  58.         byte[] temp = null;  
  59.         try {  
  60.             temp = str.getBytes("GBK");  
  61.         } catch (UnsupportedEncodingException e) {  
  62.             // TODO Auto-generated catch block   
  63.             e.printStackTrace();  
  64.         }  
  65.         return temp;  
  66.     }  
  67. }  
import java.io.UnsupportedEncodingException;

/*
 *@author: ZhengHaibo
 *web:     blog.csdn.net/nuptboyzhb
 *mail:    [email protected]
 *2012-9-25  Nanjing njupt
 */
public class NetDataTypeTransform {
	public NetDataTypeTransform(){
		
	}
	/**
	 * 將int轉爲低字節在前,高字節在後的byte數組
	 */
	public byte[] IntToByteArray(int n) {
		byte[] b = new byte[4];
		b[0] = (byte) (n & 0xff);
		b[1] = (byte) (n >> 8 & 0xff);
		b[2] = (byte) (n >> 16 & 0xff);
		b[3] = (byte) (n >> 24 & 0xff);
		return b;
	}
	/**
	 * byte數組轉化爲int
	 * 將低字節在前轉爲int,高字節在後的byte數組
	 */
	public int ByteArrayToInt(byte[] bArr) {
		int n = 0;
		for(int i=0;i<bArr.length&&i<4;i++){
			int left = i*8;
			n+= (bArr[i] << left);
		}
		return n;
	}
	/**
	 * 將byte數組轉化成String
	 */
	public String ByteArraytoString(byte[] valArr,int maxLen) {
		String result=null;
		int index = 0;
		while(index < valArr.length && index < maxLen) {
			if(valArr[index] == 0) {
				break;
			}
			index++;
		}
		byte[] temp = new byte[index];
		System.arraycopy(valArr, 0, temp, 0, index);
		try {
			result= new String(temp,"GBK");
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}
		return result;
	}
	public byte[] StringToByteArray(String str){
		byte[] temp = null;
	    try {
			temp = str.getBytes("GBK");
		} catch (UnsupportedEncodingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return temp;
	}
}


 

3.NetDataCommand.java//該類就是實現與C++服務器中COMMMAND結構體對應的java類

  1. /* 
  2.  *@author: ZhengHaibo   
  3.  *web:     blog.csdn.net/nuptboyzhb 
  4.  *mail:    [email protected] 
  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. }  
/*
 *@author: ZhengHaibo  
 *web:     blog.csdn.net/nuptboyzhb
 *mail:    [email protected]
 *2012-9-26  Nanjing njupt
 */
public class NetDataCommand {
	private static final int IDLen=4;
	private static final int LparamLen=2048;
	private static final int CommandLen=2052;
	public byte []byteArrayData=new byte[CommandLen];
	private int ID;
	private String lparam;
	private NetDataTypeTransform mDataTypeTransform=new NetDataTypeTransform();;
	public byte[] getByteArrayData(){
		return byteArrayData;
	}
	public NetDataCommand(){
		
	}
	public NetDataCommand(int ID,String lparam) {
		// TODO Auto-generated constructor stub
		
		this.ID=ID;
		this.lparam=lparam;
		byte[] IDbyte = mDataTypeTransform.IntToByteArray(ID);
		System.arraycopy(IDbyte,0, byteArrayData, 0, IDbyte.length);
		byte[] Strbyte = mDataTypeTransform.StringToByteArray(lparam);
		System.arraycopy(Strbyte,0,byteArrayData,IDbyte.length,Strbyte.length);
	}
	public NetDataCommand(byte[] dataArray){
		int id=1;
	    String lpString="";
		System.arraycopy(dataArray,0, byteArrayData,0,CommandLen);
		byte[] forIntID = new byte[IDLen];
		System.arraycopy(dataArray,0,forIntID,0,forIntID.length);
		id=mDataTypeTransform.ByteArrayToInt(forIntID);
		byte[] StrTemp=new byte[LparamLen];
		System.arraycopy(dataArray,IDLen,StrTemp,0,StrTemp.length);
		lpString=mDataTypeTransform.ByteArraytoString(StrTemp, StrTemp.length);
		//lpString=StrTemp.toString();
		ID=id;
		lparam=lpString;
	}
	public int getID(){
		return ID;
	}
	public String getLparam(){
		return lparam;
	}
	public void setID(int id) {
		this.ID=id;
	}
	public void setLparam(String str){
		this.lparam=str;
	}
	
}


 

4.ThreadRead.java//線程,用於一直接收數據。

  1. /* 
  2.  *@author: ZhengHaibo   
  3.  *web:     blog.csdn.net/nuptboyzhb 
  4.  *mail:    [email protected] 
  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. }  
/*
 *@author: ZhengHaibo  
 *web:     blog.csdn.net/nuptboyzhb
 *mail:    [email protected]
 *2012-9-26  Nanjing njupt
 */
import java.io.IOException;
import java.lang.Thread;
import java.net.Socket;
public class ThreadRead extends Thread{
	public Socket mSocket;
	public Client mClient;
	private static final int GetDriver=0x01;
	private static final int GetDirInfo=0x02;
	private static final int ExecFile=0x03;
	private static final int GetFile=0x04;
	private static final int PutFile=0x05;
	private static final int DelFile=0x06;
	private static final int DelDir =0x07;
	private static final int CreateDir=0x08;
	private static final int FileInfo=0x09;
	private static final int GetScreen=0x10;
	private static final int CommandLen=2052;
	private static int TryTimes=5;
	private byte []byteArrayData=new byte[CommandLen];
	public ThreadRead(Socket lpSocket,Client mClient) {
		// TODO Auto-generated constructor stub
		this.mSocket=lpSocket;
		this.mClient=mClient;
	}
	
	public void run() {
		while (TryTimes>0) {
			while (true) {
				try {
					mSocket.getInputStream().read(byteArrayData);
					NetDataCommand mCommand = new NetDataCommand(byteArrayData);
					switch (mCommand.getID()){
					case GetDriver:
						mClient.GetDriverPro(mSocket, mCommand);
						break;
					case GetDirInfo:
						mClient.GetDirInfoPro(mSocket, mCommand);
						break;
					case ExecFile:
						mClient.ExecFilePro(mSocket, mCommand);
						break;
					case DelFile:
						mClient.DelFilePro(mSocket, mCommand);
						break;
					case FileInfo:
						mClient.FileInfoPro(mSocket, mCommand);
						break;
					case CreateDir:
						mClient.CreateDirPro(mSocket, mCommand);
						break;
					case DelDir:
						mClient.DelFilePro(mSocket, mCommand);
						break;
					case GetFile:
						mClient.GetFilePro(mSocket, mCommand);
						break;
					case PutFile:
						mClient.PutFilePro(mSocket, mCommand);
						break;
					case GetScreen:
						mClient.GetScreenPro(mSocket, mCommand);
						break;
					default:
						System.out.println("----------wrong!!!--------------");
						break;
					}

				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
					TryTimes--;
					break;
				}
			}
		}
	}
}


 

(四)實現結果
項目源碼:http://download.csdn.net/detail/nuptboyzhb/4624574
先運行服務器,再運行java客戶端代碼。實驗結果如下:(當然,這是我電腦下的文件夾和文件(隱私暴漏了...))
運行服務器的時候,我真的想告訴360安全衛士,這不是木馬...
Eclipse的控制檯:

  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  
  Server said:send your Password
I can send password 123
----- is ok?--OK
new Thread begin...
command ID=1--command Lparam=C:
command ID=1--command Lparam=D:
command ID=1--command Lparam=E:
command ID=1--command Lparam=F:
command ID=1--command Lparam=G:
command ID=2command Lparam=$Recycle.Bin
command ID=2command Lparam=.rnd
command ID=2command Lparam=360Rec
command ID=2command Lparam=360SANDBOX
command ID=2command Lparam=9c3e42423a202668d396d3be5e
command ID=2command Lparam=autoexec.bat
command ID=2command Lparam=bar.emf
command ID=2command Lparam=config.sys
command ID=2command Lparam=cygwin
command ID=2command Lparam=Documents and Settings
command ID=2command Lparam=hiberfil.sys
command ID=2command Lparam=IO.SYS
command ID=2command Lparam=MSDOS.SYS
command ID=2command Lparam=MSOCache
command ID=2command Lparam=pagefile.sys
command ID=2command Lparam=PerfLogs
command ID=2command Lparam=Program Files
command ID=2command Lparam=ProgramData
command ID=2command Lparam=Recovery
command ID=2command Lparam=System Volume Information
command ID=2command Lparam=Users
command ID=2command Lparam=Windows
command ID=2command Lparam=$RECYCLE.BIN
command ID=2command Lparam=eclipse
command ID=2command Lparam=HelloJNI
command ID=2command Lparam=System Volume Information
command ID=2command Lparam=大學部分資料
command ID=2command Lparam=文件魚龍混雜
command ID=2command Lparam=照片和視頻
command ID=2command Lparam=研究方向
command ID=2command Lparam=研究生學習
command ID=2command Lparam=程序語言
command ID=2command Lparam=軟件安裝包
command ID=2command Lparam=$RECYCLE.BIN
command ID=2command Lparam=360
command ID=2command Lparam=360Downloads
command ID=2command Lparam=360Rec
command ID=2command Lparam=360雲盤
command ID=2command Lparam=360驅動大師目錄
command ID=2command Lparam=61ffd6de5ad141016097
command ID=2command Lparam=android-sdk-windows
command ID=2command Lparam=CSDN_ExportBlog
command ID=2command Lparam=eclipse
command ID=2command Lparam=EditPlus
command ID=2command Lparam=Fetion2012
command ID=2command Lparam=FlashFXP_4.2.4.1785
command ID=2command Lparam=JDK1_6
command ID=2command Lparam=kankan
command ID=2command Lparam=KMPlayer
command ID=2command Lparam=KSafeRecycle
command ID=2command Lparam=Kugou
command ID=2command Lparam=KuGouCache
command ID=2command Lparam=matlab2009a
command ID=2command Lparam=msdn6_0
command ID=2command Lparam=MSOCache
command ID=2command Lparam=MySQL Tools
command ID=2command Lparam=PDF_Reader
command ID=2command Lparam=PHPEclipse
command ID=2command Lparam=Program Files
command ID=2command Lparam=ps3
command ID=2command Lparam=Python27
command ID=2command Lparam=QQ
command ID=2command Lparam=QQGame
command ID=2command Lparam=sogou
command ID=2command Lparam=System Volume Information
command ID=2command Lparam=TDDOWNLOAD
command ID=2command Lparam=Ubuntu
command ID=2command Lparam=vc2008
command ID=2command Lparam=vc6_0
command ID=2command Lparam=VC98
command ID=2command Lparam=Video
command ID=2command Lparam=VMware
command ID=2command Lparam=WAMP5
command ID=2command Lparam=WindowsManagerTools
command ID=2command Lparam=youku
command ID=2command Lparam=光影看看
command ID=2command Lparam=快捷方式
command ID=2command Lparam=有道
command ID=2command Lparam=迅雷7


 

服務器的顯示:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章