1300 lines
25 KiB
C
1300 lines
25 KiB
C
|
|
///////////////////////////////////////////////////////////////////////////////////
|
|||
|
|
// multi_thread_client.c
|
|||
|
|
///////////////////////////////////////////////////////////////////////////////////
|
|||
|
|
//<2F><><EFBFBD>ļ<EFBFBD><C4BC>ǿͻ<C7BF><CDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̶߳<DFB3><CCB6><EFBFBD><EFBFBD>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><F1BDBBBB>Ĵ<EFBFBD><C4B4><EFBFBD>
|
|||
|
|
#include "common.h"
|
|||
|
|
|
|||
|
|
void myFree(void* ptr)
|
|||
|
|
{
|
|||
|
|
if(ptr != NULL)
|
|||
|
|
{
|
|||
|
|
free(ptr);
|
|||
|
|
ptr = NULL;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
int strTerm(char* str)
|
|||
|
|
{
|
|||
|
|
char* tmpstr = (char*) malloc(strlen(str) + 1);
|
|||
|
|
char* tmpstart = NULL;
|
|||
|
|
char* tmpend = NULL;
|
|||
|
|
int len = 0;
|
|||
|
|
|
|||
|
|
strcpy(tmpstr, str);
|
|||
|
|
tmpstart = tmpstr;
|
|||
|
|
|
|||
|
|
while((*tmpstart) == ' ')
|
|||
|
|
{
|
|||
|
|
tmpstart++;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
tmpend = tmpstr + strlen(str) -1;
|
|||
|
|
while((*tmpend) == ' ' || (*tmpend) == '\r' || (*tmpend) == '\n')
|
|||
|
|
{
|
|||
|
|
tmpend--;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (tmpend >= tmpstart)
|
|||
|
|
{
|
|||
|
|
len = tmpend - tmpstart + 1;
|
|||
|
|
strncpy(str, tmpstart, len);
|
|||
|
|
str[len] = '\0';
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
strcpy(str, "\0");
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
tmpstart = NULL;
|
|||
|
|
tmpend = NULL;
|
|||
|
|
|
|||
|
|
myFree(tmpstr);
|
|||
|
|
|
|||
|
|
return 0;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void pritfExit()
|
|||
|
|
{
|
|||
|
|
int iExit = 0;
|
|||
|
|
|
|||
|
|
printf("Please enter any key to exit:");
|
|||
|
|
scanf("%d", iExit);
|
|||
|
|
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
#ifdef IN_LINUX
|
|||
|
|
|
|||
|
|
long send_all(int fd, char *message, int len)
|
|||
|
|
{
|
|||
|
|
int sended = 0;
|
|||
|
|
int this_time = len;
|
|||
|
|
char *p = message;
|
|||
|
|
while (sended < len)
|
|||
|
|
{
|
|||
|
|
this_time = send(fd, p + sended, this_time, 0);
|
|||
|
|
if (this_time < 0)
|
|||
|
|
if (errno == EINTR)
|
|||
|
|
{
|
|||
|
|
continue;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
printf("send error.(%s)", strerror(errno));
|
|||
|
|
return -1;
|
|||
|
|
}
|
|||
|
|
sended += this_time;
|
|||
|
|
}
|
|||
|
|
return sended;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
int SendDataToServer_linux(int socketID, char *data, int iLen)
|
|||
|
|
{
|
|||
|
|
int iRet = 0;
|
|||
|
|
if (data == NULL)
|
|||
|
|
{
|
|||
|
|
printf("Error: Send Data is NULL!\n");
|
|||
|
|
return -1;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
char buffer[MAX_BUFFER_SIZE];
|
|||
|
|
bzero(buffer,MAX_BUFFER_SIZE);
|
|||
|
|
memcpy(buffer, data, iLen);
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˷<EFBFBD><CBB7><EFBFBD>buffer<65>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
if ((iRet = send_all(socketID, buffer, iLen)) != iLen)
|
|||
|
|
{
|
|||
|
|
printf("Error: Send Data Failed!\n");
|
|||
|
|
return -1;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return 0;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
int RecvDataFromServer_linux(int socketID, char *buffer, int iBufLen)
|
|||
|
|
{
|
|||
|
|
int length = 0;
|
|||
|
|
|
|||
|
|
if (buffer == NULL)
|
|||
|
|
{
|
|||
|
|
printf("Error: Buffer is NULL!\n");
|
|||
|
|
return -1;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
memset(buffer, 0, iBufLen);
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>շ<EFBFBD><D5B7><EFBFBD><EFBFBD>˷<EFBFBD><CBB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2>buffer<65><72>
|
|||
|
|
length = recv(socketID, buffer, iBufLen, 0);
|
|||
|
|
if (length < 0)
|
|||
|
|
{
|
|||
|
|
printf("Error: Client Recieve Data Failed!\n");
|
|||
|
|
return -1;
|
|||
|
|
}
|
|||
|
|
else if (length == 0)
|
|||
|
|
{
|
|||
|
|
printf("Server Exit!\n");
|
|||
|
|
return 0;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return length;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
int ConnectServer_linux(const char* pServerIP, int iServerPort, int iTimeout)
|
|||
|
|
{
|
|||
|
|
int iReConnectTimes = 0;
|
|||
|
|
|
|||
|
|
if (pServerIP == NULL)
|
|||
|
|
{
|
|||
|
|
printf("Error: ServerIP is NULL!\n");
|
|||
|
|
return -1;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>socket<65><74>ַ<EFBFBD>ṹclient_addr,<2C><><EFBFBD><EFBFBD><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD>internet<65><74>ַ, <20>˿<EFBFBD>
|
|||
|
|
struct sockaddr_in client_addr;
|
|||
|
|
bzero(&client_addr,sizeof(client_addr)); //<2F><>һ<EFBFBD><D2BB><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ0
|
|||
|
|
client_addr.sin_family = AF_INET; //internetЭ<74><D0AD><EFBFBD><EFBFBD>
|
|||
|
|
client_addr.sin_addr.s_addr = htons(INADDR_ANY);//INADDR_ANY<4E><59>ʾ<EFBFBD>Զ<EFBFBD><D4B6><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
|
|||
|
|
client_addr.sin_port = htons(0); //0<><30>ʾ<EFBFBD><CABE>ϵͳ<CFB5>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ж˿<D0B6>
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>internet<65><74><EFBFBD><EFBFBD>Э<EFBFBD><D0AD>(TCP)socket,<2C><>client_socket<65><74><EFBFBD><EFBFBD><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD>socket
|
|||
|
|
int client_socket = socket(AF_INET, SOCK_STREAM, 0);
|
|||
|
|
if (client_socket == -1)
|
|||
|
|
{
|
|||
|
|
printf("Error: Create Socket Failed!\n");
|
|||
|
|
close(client_socket);
|
|||
|
|
return -1;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
//<2F>ѿͻ<D1BF><CDBB><EFBFBD><EFBFBD><EFBFBD>socket<65>Ϳͻ<CDBF><CDBB><EFBFBD><EFBFBD><EFBFBD>socket<65><74>ַ<EFBFBD>ṹ<EFBFBD><E1B9B9>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD>
|
|||
|
|
if( bind(client_socket, (struct sockaddr*)&client_addr, sizeof(client_addr)))
|
|||
|
|
{
|
|||
|
|
printf("Error: Client Bind Port Failed!\n");
|
|||
|
|
close(client_socket);
|
|||
|
|
return -1;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>socket<65><74>ַ<EFBFBD>ṹserver_addr,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>internet<65><74>ַ, <20>˿<EFBFBD>
|
|||
|
|
struct sockaddr_in server_addr;
|
|||
|
|
bzero(&server_addr,sizeof(server_addr));
|
|||
|
|
server_addr.sin_family = AF_INET;
|
|||
|
|
|
|||
|
|
//inet_aton<6F><6E><EFBFBD><EFBFBD>inet_addr<64><72><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>IP<49>Ƿ<EFBFBD><C7B7><EFBFBD>Ч
|
|||
|
|
if (inet_aton(pServerIP, &server_addr.sin_addr) == 0) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IP<49><50>ַ<EFBFBD><D6B7><EFBFBD>Գ<EFBFBD><D4B3><EFBFBD><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD>
|
|||
|
|
{
|
|||
|
|
printf("Error: Server IP Address Error!\n");
|
|||
|
|
return -1;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
server_addr.sin_port = htons(iServerPort);
|
|||
|
|
socklen_t server_addr_length = sizeof(server_addr);
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD>ӳɹ<D3B3><C9B9><EFBFBD>client_socket<65><74><EFBFBD><EFBFBD><EFBFBD>˿ͻ<CBBF><CDBB><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>socket<65><74><EFBFBD><EFBFBD>
|
|||
|
|
//֧<><D6A7>ʧ<EFBFBD>ܺ<EFBFBD><DCBA><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
while (connect(client_socket, (struct sockaddr*)&server_addr, server_addr_length) < 0)
|
|||
|
|
{
|
|||
|
|
iReConnectTimes ++;
|
|||
|
|
if (iReConnectTimes > iTimeout)
|
|||
|
|
{
|
|||
|
|
printf("Error: Has Reconnect %d Times! Connect To %s:%d Failed!\n", iReConnectTimes, pServerIP, iServerPort);
|
|||
|
|
return -1;
|
|||
|
|
}
|
|||
|
|
printf("Error: Can Not Connect To %s:%d ! Reconnect : %d ...\n", pServerIP, iServerPort, iReConnectTimes);
|
|||
|
|
sleep(2);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return client_socket;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void* Thread_linux(void* para)
|
|||
|
|
{
|
|||
|
|
int iRet = 0;
|
|||
|
|
|
|||
|
|
iRet = TalkToServer(para, MAX_CONNECT_TIMEOUT);
|
|||
|
|
if (iRet == -1)
|
|||
|
|
{
|
|||
|
|
printf("Error: Talk To Server Failed!\n");
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
pthread_exit(NULL);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
#else
|
|||
|
|
|
|||
|
|
int SendDataToServer_windows(int socketID, char *data, int iBufLen)
|
|||
|
|
{
|
|||
|
|
char buffer[MAX_BUFFER_SIZE];
|
|||
|
|
int iRet = 0;
|
|||
|
|
|
|||
|
|
if (data == NULL)
|
|||
|
|
{
|
|||
|
|
printf("Error: Send Data is NULL!\n");
|
|||
|
|
return -1;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
memset(buffer, 0, MAX_BUFFER_SIZE);
|
|||
|
|
memcpy(buffer, data, iBufLen);
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>ͻ<EFBFBD><CDBB>˷<EFBFBD><CBB7><EFBFBD>buffer<65>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
iRet = send(socketID, buffer, iBufLen, 0);
|
|||
|
|
if (iRet != iBufLen)
|
|||
|
|
{
|
|||
|
|
printf("Error: send error: %d!\n", GetLastError());
|
|||
|
|
return -1;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return 0;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
int RecvDataFromServer_windows(int socketID, char *buffer, int iBufLen)
|
|||
|
|
{
|
|||
|
|
int length = 0;
|
|||
|
|
|
|||
|
|
if (buffer == NULL)
|
|||
|
|
{
|
|||
|
|
printf("Error: Malloc Failed!\n");
|
|||
|
|
return -1;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>տͻ<D5BF><CDBB>˷<EFBFBD><CBB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2>buffer<65><72>
|
|||
|
|
length = recv(socketID, buffer, iBufLen, 0);
|
|||
|
|
if (length == 0 || length == SOCKET_ERROR)
|
|||
|
|
{
|
|||
|
|
printf("Socket Close!\n");
|
|||
|
|
return 0;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return length;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
ULONG __stdcall Thread_windows(void *para)
|
|||
|
|
{
|
|||
|
|
int iRet = 0;
|
|||
|
|
|
|||
|
|
iRet = TalkToServer(para, MAX_CONNECT_TIMEOUT);
|
|||
|
|
if (iRet == -1)
|
|||
|
|
{
|
|||
|
|
printf("Error: Talk To Server Failed!\n");
|
|||
|
|
return -1;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return 0;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
SOCKET ConnectServer_windows(const char* pServerIP, int iServerPort, int iTimeout)
|
|||
|
|
{
|
|||
|
|
WSADATA Ws;
|
|||
|
|
struct sockaddr_in server_addr;
|
|||
|
|
SOCKET client_socket;
|
|||
|
|
int iRet;
|
|||
|
|
int iReConnectTimes = 0;
|
|||
|
|
|
|||
|
|
if (pServerIP == NULL)
|
|||
|
|
{
|
|||
|
|
printf("Error: ServerIP is NULL!\n");
|
|||
|
|
return -1;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><>ʼ<EFBFBD><CABC>windows socket
|
|||
|
|
if (WSAStartup(MAKEWORD(2, 2), &Ws) != 0)
|
|||
|
|
{
|
|||
|
|
printf("Error: Init Windows Socket Failed: %d !\n", GetLastError());
|
|||
|
|
return -1;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>internet<65><74><EFBFBD><EFBFBD>Э<EFBFBD><D0AD>(TCP)socket,<2C><>client_socket<65><74><EFBFBD><EFBFBD><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD>socket
|
|||
|
|
client_socket = socket(AF_INET, SOCK_STREAM, 0);
|
|||
|
|
if (client_socket == INVALID_SOCKET)
|
|||
|
|
{
|
|||
|
|
printf("Error: Create Socket Failed!\n");
|
|||
|
|
closesocket(client_socket);
|
|||
|
|
return -1;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
server_addr.sin_family = AF_INET;
|
|||
|
|
server_addr.sin_addr.s_addr = inet_addr(pServerIP);
|
|||
|
|
server_addr.sin_port = htons(iServerPort);
|
|||
|
|
memset(server_addr.sin_zero, 0x00, 8);
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD>ӳɹ<D3B3><C9B9><EFBFBD>client_socket<65><74><EFBFBD><EFBFBD><EFBFBD>˿ͻ<CBBF><CDBB><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>socket<65><74><EFBFBD><EFBFBD>
|
|||
|
|
//֧<><D6A7>ʧ<EFBFBD>ܺ<EFBFBD><DCBA><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
while (connect(client_socket, (struct sockaddr*)&server_addr, sizeof(server_addr)) == SOCKET_ERROR)
|
|||
|
|
{
|
|||
|
|
iReConnectTimes ++;
|
|||
|
|
if (iReConnectTimes >= iTimeout)
|
|||
|
|
{
|
|||
|
|
printf("Error: Has Reconnect %d Times! Connect To %s:%d Failed!\n", iReConnectTimes, pServerIP, iServerPort);
|
|||
|
|
return -1;
|
|||
|
|
}
|
|||
|
|
printf("Error: Can Not Connect To %s:%d ! Reconnect : %d ...\n", pServerIP, iServerPort, iReConnectTimes);
|
|||
|
|
Sleep(2000);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return client_socket;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
int TalkToServer(void* para, int iTimeout)
|
|||
|
|
{
|
|||
|
|
int iRet = 0;
|
|||
|
|
int iPort = 0;
|
|||
|
|
char strIP[MAX_IP_LENGTH];
|
|||
|
|
char strCmd[MAX_CMDLINE_LENGTH];
|
|||
|
|
char *pCmdType = NULL;
|
|||
|
|
char *pPara = NULL;
|
|||
|
|
|
|||
|
|
#ifdef IN_LINUX
|
|||
|
|
int client_socket;
|
|||
|
|
#else
|
|||
|
|
SOCKET client_socket;
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
memset(strIP, 0, MAX_IP_LENGTH);
|
|||
|
|
memset(strCmd, 0, MAX_CMDLINE_LENGTH);
|
|||
|
|
|
|||
|
|
iRet = ParseCmd((char*)para, strIP, &iPort, strCmd);
|
|||
|
|
if (iRet == -1)
|
|||
|
|
{
|
|||
|
|
printf("Error: Parse CMD Failed!\n");
|
|||
|
|
return -1;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
#ifdef IN_LINUX
|
|||
|
|
client_socket = ConnectServer_linux(strIP, iPort, iTimeout);
|
|||
|
|
if (client_socket == -1)
|
|||
|
|
{
|
|||
|
|
printf("Error: ConnectServer Failed!\n");
|
|||
|
|
return -1;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
#else
|
|||
|
|
client_socket = ConnectServer_windows(strIP, iPort, iTimeout);
|
|||
|
|
if (client_socket == INVALID_SOCKET)
|
|||
|
|
{
|
|||
|
|
printf("Error: ConnectServer Failed!\n");
|
|||
|
|
return -1;
|
|||
|
|
}
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
printf("Client Connect Server %s Success!\n", strIP);
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><CDB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><CBB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
pCmdType = strtok(strCmd, "[");
|
|||
|
|
if (pCmdType == NULL)
|
|||
|
|
{
|
|||
|
|
printf("Error: Cmdlist para %s error!\n", para);
|
|||
|
|
|
|||
|
|
#ifdef IN_LINUX
|
|||
|
|
close(client_socket);
|
|||
|
|
#else
|
|||
|
|
closesocket(client_socket);
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
return -1;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
strTerm(pCmdType);
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><CDB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><CBB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
pPara = strtok(NULL, "]");
|
|||
|
|
if (pPara == NULL)
|
|||
|
|
{
|
|||
|
|
printf("Error: Cmdlist para %s error!\n", para);
|
|||
|
|
|
|||
|
|
#ifdef IN_LINUX
|
|||
|
|
close(client_socket);
|
|||
|
|
#else
|
|||
|
|
closesocket(client_socket);
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
return -1;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
strTerm(pPara);
|
|||
|
|
|
|||
|
|
//Ϊ<><CEAA><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
if (strcmp(COPYFILE, pCmdType) == 0)
|
|||
|
|
{
|
|||
|
|
if (CopyFileFromServer((void*)client_socket, pPara) == -1)
|
|||
|
|
{
|
|||
|
|
printf("Error: Copy File From Server Failed!\n");
|
|||
|
|
|
|||
|
|
#ifdef IN_LINUX
|
|||
|
|
close(client_socket);
|
|||
|
|
#else
|
|||
|
|
closesocket(client_socket);
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
return -1;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
//ֻ<><D6BB><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD>ϵͳ<CFB5><CDB3><EFBFBD><EFBFBD><EEA3AC><EFBFBD><EFBFBD>ִ<EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
else if(strcmp(CMD, pCmdType) == 0)
|
|||
|
|
{
|
|||
|
|
iRet = SendCmdToServer((void*)client_socket, pPara, CMD_FALG_NOWAIT);
|
|||
|
|
if (iRet == -1)
|
|||
|
|
{
|
|||
|
|
printf("Error: Send Data To Server Failed!\n");
|
|||
|
|
|
|||
|
|
#ifdef IN_LINUX
|
|||
|
|
close(client_socket);
|
|||
|
|
#else
|
|||
|
|
closesocket(client_socket);
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
return -1;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
else if(strcmp(CMDECHO,pCmdType) == 0)
|
|||
|
|
{
|
|||
|
|
iRet = SendCmdToServer((void*)client_socket, pPara, CMD_ECHO);
|
|||
|
|
if (iRet == -1)
|
|||
|
|
{
|
|||
|
|
printf("Error: Send Data To Server Failed!\n");
|
|||
|
|
|
|||
|
|
#ifdef IN_LINUX
|
|||
|
|
close(client_socket);
|
|||
|
|
#else
|
|||
|
|
closesocket(client_socket);
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
return -1;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
//Ϊ<>ȴ<EFBFBD><C8B4>ͻ<EFBFBD><CDBB><EFBFBD>ִ<EFBFBD><D6B4><EFBFBD><EFBFBD>ϵͳ<CFB5><CDB3><EFBFBD><EFBFBD>
|
|||
|
|
else if(strcmp(CMDWAIT, pCmdType) == 0)
|
|||
|
|
{
|
|||
|
|
iRet = SendCmdToServer((void*)client_socket, pPara, CMD_FALG_WAIT);
|
|||
|
|
if (iRet == -1)
|
|||
|
|
{
|
|||
|
|
printf("Error: Send Data To Server Failed!\n");
|
|||
|
|
|
|||
|
|
#ifdef IN_LINUX
|
|||
|
|
close(client_socket);
|
|||
|
|
#else
|
|||
|
|
closesocket(client_socket);
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
return -1;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
//Ϊ<><CEAA><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
else if (strcmp(SENDFILE, pCmdType) == 0)
|
|||
|
|
{
|
|||
|
|
if (SendFileToServer((void*)client_socket, pPara) == -1)
|
|||
|
|
{
|
|||
|
|
printf("Error: Send File To Server Failed!\n");
|
|||
|
|
|
|||
|
|
#ifdef IN_LINUX
|
|||
|
|
close(client_socket);
|
|||
|
|
#else
|
|||
|
|
closesocket(client_socket);
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
return -1;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
//Ϊ<><CEAA><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
else if (strcmp(FINDPROC, pCmdType) == 0)
|
|||
|
|
{
|
|||
|
|
if (FindProcessFromServer((void*)client_socket, pPara) == -1)
|
|||
|
|
{
|
|||
|
|
printf("Error: Find Process From Server Failed!\n");
|
|||
|
|
|
|||
|
|
#ifdef IN_LINUX
|
|||
|
|
close(client_socket);
|
|||
|
|
#else
|
|||
|
|
closesocket(client_socket);
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
return -1;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
printf("Error: No Support : %s\n", pCmdType);
|
|||
|
|
|
|||
|
|
#ifdef IN_LINUX
|
|||
|
|
close(client_socket);
|
|||
|
|
#else
|
|||
|
|
closesocket(client_socket);
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
return -1;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
#ifdef IN_LINUX
|
|||
|
|
close(client_socket);
|
|||
|
|
#else
|
|||
|
|
closesocket(client_socket);
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
return 0;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
int SendCmdToServer(void* socketID, char* para, int isWaitFlag)
|
|||
|
|
{
|
|||
|
|
int iRet = 0;
|
|||
|
|
char buf[BUFSIZE];
|
|||
|
|
char strCmd[MAX_CMDLINE_LENGTH];
|
|||
|
|
|
|||
|
|
memset(strCmd, 0, MAX_CMDLINE_LENGTH);
|
|||
|
|
|
|||
|
|
if (CMD_FALG_NOWAIT == isWaitFlag)
|
|||
|
|
{
|
|||
|
|
strcpy(strCmd, CMD);
|
|||
|
|
}
|
|||
|
|
else if(CMD_ECHO == isWaitFlag)
|
|||
|
|
{
|
|||
|
|
strcpy(strCmd, CMDECHO);
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
strcpy(strCmd, CMDWAIT);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
strcat(strCmd, "[");
|
|||
|
|
strcat(strCmd, para);
|
|||
|
|
strcat(strCmd, "]");
|
|||
|
|
iRet = strlen(strCmd);
|
|||
|
|
|
|||
|
|
#ifdef IN_LINUX
|
|||
|
|
iRet = SendDataToServer_linux((int)socketID, strCmd, iRet);
|
|||
|
|
#else
|
|||
|
|
iRet = SendDataToServer_windows((SOCKET)socketID, strCmd, iRet);
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
if ( iRet == -1)
|
|||
|
|
{
|
|||
|
|
printf("Error: Send Cmd To Server Failed: %s\n", para);
|
|||
|
|
return -1;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
printf("Send Cmd To Server Success: %s\n", para);
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>ȴ<EFBFBD>
|
|||
|
|
if (isWaitFlag == CMD_FALG_NOWAIT)
|
|||
|
|
{
|
|||
|
|
return 0;
|
|||
|
|
}
|
|||
|
|
//<2F>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD>Ӧ<EFBFBD><D3A6>
|
|||
|
|
else if(isWaitFlag == CMD_ECHO)
|
|||
|
|
{
|
|||
|
|
memset(buf, 0, BUFSIZE);
|
|||
|
|
recv((int)socketID, buf, BUFSIZE, 0);
|
|||
|
|
printf("%s",buf);
|
|||
|
|
while(recv((int)socketID, buf, BUFSIZE, 0) != 0)
|
|||
|
|
{
|
|||
|
|
printf("%s",buf);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
iRet = WaitRspFromServer(socketID);
|
|||
|
|
if ( iRet == -1)
|
|||
|
|
{
|
|||
|
|
printf("Error: Wait for Rsp From Server Failed!\n");
|
|||
|
|
return -1;
|
|||
|
|
}
|
|||
|
|
else if (iRet == RET_OK)
|
|||
|
|
{
|
|||
|
|
printf("---------\n");
|
|||
|
|
printf("Response: OK!\n");
|
|||
|
|
}
|
|||
|
|
else if (iRet == RET_FAILED)
|
|||
|
|
{
|
|||
|
|
printf("---------\n");
|
|||
|
|
printf("Response: Failed!\n");
|
|||
|
|
printf(" Server Run Cmd Failed! No such file or directory, or permission denied ...\n Please Check!\n");
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
printf("---------\n");
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return iRet;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
int ParseCmd(char *data, char *ip, int *port, char *cmd)
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
unsigned char str[MAX_CMDLINE_LENGTH];
|
|||
|
|
char * pServerIP = NULL;
|
|||
|
|
char * pServerPort = NULL;
|
|||
|
|
char * pCmd = NULL;
|
|||
|
|
|
|||
|
|
memset(str, 0, MAX_CMDLINE_LENGTH);
|
|||
|
|
strncpy(str, data, MAX_CMDLINE_LENGTH);
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IP
|
|||
|
|
pServerIP = strtok(str, "#");
|
|||
|
|
if (pServerIP == NULL)
|
|||
|
|
{
|
|||
|
|
return -1;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
strTerm(pServerIP);
|
|||
|
|
strncpy(ip, pServerIP, MAX_IP_LENGTH);
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>PORT
|
|||
|
|
pServerPort = strtok(NULL, "#");
|
|||
|
|
if (pServerPort == NULL)
|
|||
|
|
{
|
|||
|
|
return -1;
|
|||
|
|
}
|
|||
|
|
strTerm(pServerPort);
|
|||
|
|
|
|||
|
|
*port = atoi(pServerPort);
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><CDB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><CBB5><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
pCmd = strtok(NULL, "#");
|
|||
|
|
if (pCmd == NULL)
|
|||
|
|
{
|
|||
|
|
return -1;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
strTerm(pCmd);
|
|||
|
|
strncpy(cmd, pCmd, MAX_CMDLINE_LENGTH);
|
|||
|
|
|
|||
|
|
return 0;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
int CopyFileFromServer(void* socketID, char *data)
|
|||
|
|
{
|
|||
|
|
char strPara[MAX_CMDLINE_LENGTH];
|
|||
|
|
char strBuffer[MAX_BUFFER_SIZE];
|
|||
|
|
char *pFrom = NULL;
|
|||
|
|
char *pTo = NULL;
|
|||
|
|
FILE *fr = NULL;
|
|||
|
|
int iRet = 0;
|
|||
|
|
int iTotal = 0;
|
|||
|
|
|
|||
|
|
#ifdef IN_LINUX
|
|||
|
|
int socket;
|
|||
|
|
#else
|
|||
|
|
SOCKET socket;
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
#ifdef IN_LINUX
|
|||
|
|
socket = (int)socketID;
|
|||
|
|
if (socket == -1)
|
|||
|
|
{
|
|||
|
|
printf("Error: Socket ID Error!\n");
|
|||
|
|
return -1;
|
|||
|
|
}
|
|||
|
|
#else
|
|||
|
|
socket = (SOCKET)socketID;
|
|||
|
|
if (socket == INVALID_SOCKET)
|
|||
|
|
{
|
|||
|
|
printf("Error: Socket ID Error!\n");
|
|||
|
|
return -1;
|
|||
|
|
}
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
if (data == NULL)
|
|||
|
|
{
|
|||
|
|
printf("Error: Send Data is NULL!\n");
|
|||
|
|
return -1;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
memset(strPara, 0, MAX_CMDLINE_LENGTH);
|
|||
|
|
memset(strBuffer, 0, MAX_BUFFER_SIZE);
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD>ķ<EFBFBD><C4B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>ȫ·<C8AB><C2B7><EFBFBD><EFBFBD>
|
|||
|
|
pFrom = strtok(data, ",");
|
|||
|
|
if (pFrom == NULL)
|
|||
|
|
{
|
|||
|
|
printf("Cmdlist para %s error!\n", strPara);
|
|||
|
|
return -1;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
strTerm(pFrom);
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC>ڿͻ<DABF><CDBB>˵Ĵ<CBB5><C4B4><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD>ȫ·<C8AB><C2B7><EFBFBD><EFBFBD>
|
|||
|
|
pTo = strtok(NULL, ",");
|
|||
|
|
if (pTo == NULL)
|
|||
|
|
{
|
|||
|
|
printf("Cmdlist para %s error!\n", strPara);
|
|||
|
|
return -1;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
strTerm(pTo);
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>췢<EFBFBD><ECB7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
strcpy(strPara, COPYFILE);
|
|||
|
|
strcat(strPara, "[");
|
|||
|
|
strcat(strPara, pFrom);
|
|||
|
|
strcat(strPara, "]");
|
|||
|
|
iRet = strlen(strPara);
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><CDB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
#ifdef IN_LINUX
|
|||
|
|
iRet = SendDataToServer_linux(socket, strPara, iRet);
|
|||
|
|
#else
|
|||
|
|
iRet = SendDataToServer_windows(socket, strPara, iRet);
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
if ( iRet == -1)
|
|||
|
|
{
|
|||
|
|
printf("Error: Send Data To Server Failed: %s\n", strPara);
|
|||
|
|
return -1;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
printf("Send Data To Server Success: %s\n", strPara);
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><D7BC>д<EFBFBD><D0B4><EFBFBD>ļ<EFBFBD>
|
|||
|
|
fr = fopen(pTo, "wb");
|
|||
|
|
if(fr == NULL)
|
|||
|
|
{
|
|||
|
|
printf("Error: Open File :%s Failed!\n", pTo);
|
|||
|
|
return -1;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Է<EFBFBD><D4B7><EFBFBD><EFBFBD>˵<EFBFBD><CBB5>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
#ifdef IN_LINUX
|
|||
|
|
iRet = RecvDataFromServer_linux(socket, strBuffer, MAX_BUFFER_SIZE);
|
|||
|
|
#else
|
|||
|
|
iRet = RecvDataFromServer_windows(socket, strBuffer, MAX_BUFFER_SIZE);
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD>ӹر<D3B9>socket
|
|||
|
|
if (iRet == -1)
|
|||
|
|
{
|
|||
|
|
#ifdef IN_LINUX
|
|||
|
|
close(socket);
|
|||
|
|
#else
|
|||
|
|
closesocket(socket);
|
|||
|
|
#endif
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>յ<EFBFBD><D5B5>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>д<EFBFBD><D0B4><EFBFBD>ļ<EFBFBD>
|
|||
|
|
while ( iRet > 0)
|
|||
|
|
{
|
|||
|
|
iTotal += iRet;
|
|||
|
|
|
|||
|
|
if (fwrite(strBuffer, sizeof(char), iRet, fr) != iRet)
|
|||
|
|
{
|
|||
|
|
printf("Error: Write File Failed : %s\n", pTo);
|
|||
|
|
fclose(fr);
|
|||
|
|
return -1;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
//<2F><><EFBFBD>ͳ<EFBFBD><CDB3><EFBFBD>
|
|||
|
|
if (SendRspToSever(socketID, RSP_OK) == -1)
|
|||
|
|
{
|
|||
|
|
printf("Error: Send Rsp To Server Failed!\n");
|
|||
|
|
fclose(fr);
|
|||
|
|
return -1;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
memset(strBuffer, 0, MAX_BUFFER_SIZE);
|
|||
|
|
|
|||
|
|
#ifdef IN_LINUX
|
|||
|
|
iRet = RecvDataFromServer_linux(socket, strBuffer, MAX_BUFFER_SIZE);
|
|||
|
|
#else
|
|||
|
|
iRet = RecvDataFromServer_windows(socket, strBuffer, MAX_BUFFER_SIZE);
|
|||
|
|
#endif
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
printf("Copy File length: %d\n", iTotal);
|
|||
|
|
|
|||
|
|
fclose(fr);
|
|||
|
|
return 0;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
int SendFileToServer(void* socketID, char *data)
|
|||
|
|
{
|
|||
|
|
char strPara[MAX_CMDLINE_LENGTH];
|
|||
|
|
char strBuffer[MAX_BUFFER_SIZE];
|
|||
|
|
char *pFrom = NULL;
|
|||
|
|
char *pTo = NULL;
|
|||
|
|
FILE *fr = NULL;
|
|||
|
|
int iRet = 0;
|
|||
|
|
int iLen = 0;
|
|||
|
|
int iTotal = 0;
|
|||
|
|
|
|||
|
|
#ifdef IN_LINUX
|
|||
|
|
int socket;
|
|||
|
|
#else
|
|||
|
|
SOCKET socket;
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
#ifdef IN_LINUX
|
|||
|
|
socket = (int)socketID;
|
|||
|
|
if (socket == -1)
|
|||
|
|
{
|
|||
|
|
printf("Error: Socket ID Error!\n");
|
|||
|
|
return -1;
|
|||
|
|
}
|
|||
|
|
#else
|
|||
|
|
socket = (SOCKET)socketID;
|
|||
|
|
if (socket == INVALID_SOCKET)
|
|||
|
|
{
|
|||
|
|
printf("Error: Socket ID Error!\n");
|
|||
|
|
return -1;
|
|||
|
|
}
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
if (data == NULL)
|
|||
|
|
{
|
|||
|
|
printf("Error: Send Data is NULL!\n");
|
|||
|
|
return -1;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
memset(strPara, 0, MAX_CMDLINE_LENGTH);
|
|||
|
|
memset(strBuffer, 0, MAX_BUFFER_SIZE);
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD>͵Ŀͻ<C4BF><CDBB>˵<EFBFBD><CBB5>ļ<EFBFBD><C4BC><EFBFBD>ȫ·<C8AB><C2B7><EFBFBD><EFBFBD>
|
|||
|
|
pFrom = strtok(data, ",");
|
|||
|
|
if (pFrom == NULL)
|
|||
|
|
{
|
|||
|
|
printf("Cmdlist para %s error!\n", strPara);
|
|||
|
|
return -1;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
strTerm(pFrom);
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC>ڷ<EFBFBD><DAB7><EFBFBD><EFBFBD>˵Ĵ<CBB5><C4B4><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD>ȫ·<C8AB><C2B7><EFBFBD><EFBFBD>
|
|||
|
|
pTo = strtok(NULL, ",");
|
|||
|
|
if (pTo == NULL)
|
|||
|
|
{
|
|||
|
|
printf("Cmdlist para %s error!\n", strPara);
|
|||
|
|
return -1;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
strTerm(pTo);
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>췢<EFBFBD><ECB7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
strcpy(strPara, SENDFILE);
|
|||
|
|
strcat(strPara, "[");
|
|||
|
|
strcat(strPara, pTo);
|
|||
|
|
strcat(strPara, "]");
|
|||
|
|
iRet = strlen(strPara);
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><CDB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
#ifdef IN_LINUX
|
|||
|
|
iLen = SendDataToServer_linux(socket, strPara, iRet);
|
|||
|
|
#else
|
|||
|
|
iLen = SendDataToServer_windows(socket, strPara, iRet);
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
if ( iLen == -1)
|
|||
|
|
{
|
|||
|
|
printf("Error: Send Data To Server Failed: %s\n", strPara);
|
|||
|
|
return -1;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
printf("Send Data To Server Success: %s\n", strPara);
|
|||
|
|
|
|||
|
|
//<2F>ȴ<EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD>Ϣ
|
|||
|
|
iRet = WaitRspFromServer(socketID);
|
|||
|
|
if ( iRet == -1)
|
|||
|
|
{
|
|||
|
|
printf("Error: Wait for Rsp From Server Failed!\n");
|
|||
|
|
return -1;
|
|||
|
|
}
|
|||
|
|
else if (iRet == RET_FAILED)
|
|||
|
|
{
|
|||
|
|
printf("Error: Server Error!\n");
|
|||
|
|
return -1;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
printf("Server Read To Receive File!\n");
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
|
|||
|
|
fr = fopen(pFrom, "rb");
|
|||
|
|
if(fr == NULL)
|
|||
|
|
{
|
|||
|
|
printf("Error: Open File :%s Failed!\n", pFrom);
|
|||
|
|
return -1;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
printf("Sending File to Server...\n");
|
|||
|
|
|
|||
|
|
//<2F><>ʼ<EFBFBD><CABC><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
while ((iLen = fread(strBuffer, sizeof(char), MAX_BUFFER_SIZE-1, fr)) > 0)
|
|||
|
|
{
|
|||
|
|
iTotal += iLen;
|
|||
|
|
|
|||
|
|
#ifdef IN_LINUX
|
|||
|
|
iRet = SendDataToServer_linux(socket, strBuffer, iLen);
|
|||
|
|
#else
|
|||
|
|
iRet = SendDataToServer_windows(socket, strBuffer, iLen);
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
if (iRet == -1)
|
|||
|
|
{
|
|||
|
|
printf("Error: Send Data To Server Failed!\n");
|
|||
|
|
fclose(fr);
|
|||
|
|
return -1;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
memset(strBuffer, 0, MAX_BUFFER_SIZE);
|
|||
|
|
|
|||
|
|
//<2F>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD>Ӧ<EFBFBD><D3A6>
|
|||
|
|
if (WaitRspFromServer(socketID) == -1)
|
|||
|
|
{
|
|||
|
|
printf("Error: Wait for Rsp From Server Failed!\n");
|
|||
|
|
return -1;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
printf("Send File Length: %ld\n", iTotal);
|
|||
|
|
fclose(fr);
|
|||
|
|
|
|||
|
|
return 0;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
int FindProcessFromServer(void* socketID, char *data)
|
|||
|
|
{
|
|||
|
|
int iRet = 0;
|
|||
|
|
char strCmd[MAX_CMDLINE_LENGTH];
|
|||
|
|
|
|||
|
|
#ifdef IN_LINUX
|
|||
|
|
int socket;
|
|||
|
|
#else
|
|||
|
|
SOCKET socket;
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
#ifdef IN_LINUX
|
|||
|
|
socket = (int)socketID;
|
|||
|
|
if (socket == -1)
|
|||
|
|
{
|
|||
|
|
printf("Error: Socket ID Error!\n");
|
|||
|
|
return -1;
|
|||
|
|
}
|
|||
|
|
#else
|
|||
|
|
socket = (SOCKET)socketID;
|
|||
|
|
if (socket == INVALID_SOCKET)
|
|||
|
|
{
|
|||
|
|
printf("Error: Socket ID Error!\n");
|
|||
|
|
return -1;
|
|||
|
|
}
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
memset(strCmd, 0, MAX_CMDLINE_LENGTH);
|
|||
|
|
strcpy(strCmd, FINDPROC);
|
|||
|
|
strcat(strCmd, "[");
|
|||
|
|
strcat(strCmd, data);
|
|||
|
|
strcat(strCmd, "]");
|
|||
|
|
iRet = strlen(strCmd);
|
|||
|
|
|
|||
|
|
#ifdef IN_LINUX
|
|||
|
|
iRet = SendDataToServer_linux((int)socketID, strCmd, iRet);
|
|||
|
|
#else
|
|||
|
|
iRet = SendDataToServer_windows((SOCKET)socketID, strCmd, iRet);
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
if ( iRet == -1)
|
|||
|
|
{
|
|||
|
|
printf("Error: Send Data To Server Failed: %s\n", strCmd);
|
|||
|
|
return -1;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
printf("Send Data To Server Success: %s\n", strCmd);
|
|||
|
|
|
|||
|
|
//<2F>ȴ<EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD>Ϣ
|
|||
|
|
iRet = WaitRspFromServer(socketID);
|
|||
|
|
if ( iRet == -1)
|
|||
|
|
{
|
|||
|
|
printf("Error: Wait for Rsp From Server Failed!\n");
|
|||
|
|
return -1;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (iRet == RET_OK)
|
|||
|
|
{
|
|||
|
|
printf("The Process %s Run Status: YES\n", data);
|
|||
|
|
}
|
|||
|
|
else if (iRet == RET_FAILED)
|
|||
|
|
{
|
|||
|
|
printf("The Process %s Run Status: NO\n", data);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return iRet;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
int WaitRspFromServer(void* socketID)
|
|||
|
|
{
|
|||
|
|
int iRet;
|
|||
|
|
char strPara[MAX_CMDLINE_LENGTH];
|
|||
|
|
|
|||
|
|
#ifdef IN_LINUX
|
|||
|
|
int socket;
|
|||
|
|
#else
|
|||
|
|
SOCKET socket;
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
#ifdef IN_LINUX
|
|||
|
|
socket = (int)socketID;
|
|||
|
|
if (socket == -1)
|
|||
|
|
{
|
|||
|
|
printf("Error: Socket ID Error!\n");
|
|||
|
|
return -1;
|
|||
|
|
}
|
|||
|
|
#else
|
|||
|
|
socket = (SOCKET)socketID;
|
|||
|
|
if (socket == INVALID_SOCKET)
|
|||
|
|
{
|
|||
|
|
printf("Error: Socket ID Error!\n");
|
|||
|
|
return -1;
|
|||
|
|
}
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
memset(strPara, 0, MAX_CMDLINE_LENGTH);
|
|||
|
|
|
|||
|
|
#ifdef IN_LINUX
|
|||
|
|
iRet = RecvDataFromServer_linux(socket, strPara, MAX_CMDLINE_LENGTH);
|
|||
|
|
#else
|
|||
|
|
iRet = RecvDataFromServer_windows(socket, strPara, MAX_CMDLINE_LENGTH);
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
if (iRet > 0)
|
|||
|
|
{
|
|||
|
|
iRet = ParseRsp(strPara);
|
|||
|
|
if (iRet == -1)
|
|||
|
|
{
|
|||
|
|
printf("Error: Parse Rsp %s Failed!\n", strPara);
|
|||
|
|
return -1;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return iRet;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
return -1;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
int ParseRsp(char* pRsp)
|
|||
|
|
{
|
|||
|
|
char *pPara = NULL;
|
|||
|
|
char strRsp[MAX_RSP_LENGTH];
|
|||
|
|
|
|||
|
|
memset(strRsp, 0, MAX_RSP_LENGTH);
|
|||
|
|
|
|||
|
|
if (strRsp == NULL)
|
|||
|
|
{
|
|||
|
|
printf("Error: strRsp is NULL!\n");
|
|||
|
|
return -1;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
strncpy(strRsp, pRsp, MAX_RSP_LENGTH);
|
|||
|
|
|
|||
|
|
pPara = strtok(strRsp, "#");
|
|||
|
|
if (pRsp == NULL)
|
|||
|
|
{
|
|||
|
|
printf("Error: Rsp %s error!\n", pRsp);
|
|||
|
|
return -1;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
pPara = strtok(NULL, "#");
|
|||
|
|
if (pRsp == NULL)
|
|||
|
|
{
|
|||
|
|
printf("Error: Rsp %s error!\n", pRsp);
|
|||
|
|
return -1;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD>ϢΪOK
|
|||
|
|
if (strcmp(pPara, RSP_OK) == 0)
|
|||
|
|
{
|
|||
|
|
return RET_OK;
|
|||
|
|
}
|
|||
|
|
else if (strcmp(pPara, RSP_FAILED) == 0)
|
|||
|
|
{
|
|||
|
|
return RET_FAILED;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return -1;
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
int SendRspToSever(void* socketID, char *result)
|
|||
|
|
{
|
|||
|
|
int iRet = 0;
|
|||
|
|
char strRsp[MAX_RSP_LENGTH];
|
|||
|
|
|
|||
|
|
#ifdef IN_LINUX
|
|||
|
|
int socket;
|
|||
|
|
#else
|
|||
|
|
SOCKET socket;
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
#ifdef IN_LINUX
|
|||
|
|
socket = (int)socketID;
|
|||
|
|
if (socket == -1)
|
|||
|
|
{
|
|||
|
|
printf("Error: Socket ID Error!\n");
|
|||
|
|
return -1;
|
|||
|
|
}
|
|||
|
|
#else
|
|||
|
|
socket = (SOCKET)socketID;
|
|||
|
|
if (socket == INVALID_SOCKET)
|
|||
|
|
{
|
|||
|
|
printf("Error: Socket ID Error!\n");
|
|||
|
|
return -1;
|
|||
|
|
}
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
if (result == NULL)
|
|||
|
|
{
|
|||
|
|
printf("Error: Send data is NULL!\n");
|
|||
|
|
return -1;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
memset(strRsp, 0, MAX_RSP_LENGTH);
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD>Ϣ
|
|||
|
|
strcpy(strRsp, RSP);
|
|||
|
|
strcat(strRsp, "#");
|
|||
|
|
strcat(strRsp, result);
|
|||
|
|
|
|||
|
|
#ifdef IN_LINUX
|
|||
|
|
iRet = SendDataToServer_linux(socket, strRsp, strlen(strRsp));
|
|||
|
|
#else
|
|||
|
|
iRet = SendDataToServer_windows(socket, strRsp, strlen(strRsp));
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
if (iRet == -1)
|
|||
|
|
{
|
|||
|
|
printf("Error: Send Data To Client Failed!\n");
|
|||
|
|
return -1;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return 0;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
int CreateSubThread(char *para)
|
|||
|
|
{
|
|||
|
|
#ifdef IN_LINUX
|
|||
|
|
pthread_t child_thread;
|
|||
|
|
#else
|
|||
|
|
HANDLE child_thread;
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
if (para == NULL)
|
|||
|
|
{
|
|||
|
|
printf("Error: CreateThread func para is NULL\n");
|
|||
|
|
return -1;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
#ifdef IN_LINUX
|
|||
|
|
|
|||
|
|
if( pthread_create(&child_thread, NULL, Thread_linux, (void *)para) < 0 )
|
|||
|
|
{
|
|||
|
|
printf("Error: Create Thread Failed : %s\n", strerror(errno));
|
|||
|
|
return -1;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F>ȴ<EFBFBD><C8B4>߳<EFBFBD><DFB3>˳<EFBFBD>
|
|||
|
|
if(child_thread != 0)
|
|||
|
|
{
|
|||
|
|
pthread_join(child_thread, NULL);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
#else
|
|||
|
|
|
|||
|
|
child_thread = CreateThread(NULL, 0, Thread_windows, (void *)para, 0, NULL);
|
|||
|
|
if (child_thread == NULL)
|
|||
|
|
{
|
|||
|
|
printf("Error: Create Thread Failed!\n");
|
|||
|
|
return -1;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
WaitForSingleObject(child_thread, INFINITE);
|
|||
|
|
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
return 0;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
int RunCmdlist()
|
|||
|
|
{
|
|||
|
|
FILE* fr = NULL;
|
|||
|
|
char strCmdLine[MAX_BUFFER_SIZE];
|
|||
|
|
int iCmdNum = 1;
|
|||
|
|
|
|||
|
|
memset(strCmdLine, 0, MAX_BUFFER_SIZE);
|
|||
|
|
|
|||
|
|
// <20><>ȡcmdlist<73><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD><D6B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
fr = fopen(CMDLIST, "r");
|
|||
|
|
if(fr == NULL)
|
|||
|
|
{
|
|||
|
|
printf("open the file of %s failed!\n", CMDLIST);
|
|||
|
|
return -1;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
while (fgets(strCmdLine, MAX_BUFFER_SIZE, fr) != NULL)
|
|||
|
|
{
|
|||
|
|
printf("=============== begin %d ===============\n", iCmdNum);
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>̣߳<DFB3><CCA3><EFBFBD><EFBFBD>߳<EFBFBD><DFB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ͳ<EFBFBD><CDB2><EFBFBD>
|
|||
|
|
CreateSubThread(strCmdLine);
|
|||
|
|
|
|||
|
|
printf("=============== end %d ===============\n", iCmdNum);
|
|||
|
|
|
|||
|
|
iCmdNum++;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
fclose(fr);
|
|||
|
|
|
|||
|
|
return 0;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
int RunCmd(int argc, char **argv)
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
int iRet = 0;
|
|||
|
|
int iTimeout = MAX_CONNECT_TIMEOUT;
|
|||
|
|
char szCmd[MAX_CMDLINE_LENGTH];
|
|||
|
|
|
|||
|
|
printf("=============== begin ===============\n");
|
|||
|
|
|
|||
|
|
memset(szCmd, 0, MAX_CMDLINE_LENGTH);
|
|||
|
|
strncpy(szCmd, argv[1], MAX_CMDLINE_LENGTH);
|
|||
|
|
|
|||
|
|
if (argc >= 3)
|
|||
|
|
{
|
|||
|
|
iTimeout = atoi(argv[2]);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
iRet = TalkToServer(szCmd, iTimeout);
|
|||
|
|
if (iRet == -1)
|
|||
|
|
{
|
|||
|
|
printf("Error: Talk To Server Failed!\n");
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
printf("=============== end ===============\n");
|
|||
|
|
|
|||
|
|
return 0;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
int main(int argc, char **argv)
|
|||
|
|
{
|
|||
|
|
//ִ<><D6B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
if (argc >= 2)
|
|||
|
|
{
|
|||
|
|
RunCmd(argc, argv);
|
|||
|
|
}
|
|||
|
|
//ִ<><D6B4>cmdlist<73>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
RunCmdlist();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return 0;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
|