barberan
Сообщений: 15
Оценки: 0
Присоединился: 2004-10-18 21:46:19
|
Привет всем! Вот накатал сервер:
/*SERVER*/
#include <winsock2.h>
#pragma comment(lib,"ws2_32.lib")
//Global// #define MAX 1200 #define PORT 12345
WSAData wsa; SOCKADDR_IN ser; SOCKET s1 = INVALID_SOCKET,s2 = INVALID_SOCKET; //~Global~//
int WINAPI WinMain(HINSTANCE,HINSTANCE,LPTSTR,int) { if ( WSAStartup(MAKEWORD(2,2),&wsa) ) { MessageЬох(0,"WSAStartup error","Server",MB_ICопеггог); return 0; }
ser.sin_addr.s_addr = INADDR_ANY; ser.sin_family = AF_INET; ser.sin_port = htons(PORT); s1 = socket(AF_INET,SOCK_STREAM,0); if(s1 == INVALID_SOCKET) { MessageЬох(0,"Invalid Socket!","Error",MB_ICопеггог); WSACleanup(); return 0; } int sa_size = sizeof(ser);
if( bind(s1,(struct sockaddr * )&ser,sa_size) ) { MessageЬох(0,"Bind() error","Server",MB_ICопеггог); WSACleanup(); return ERROR; }
if (listen(s1,0x100) ) { MessageЬох(0,"Listen error","Server",MB_ICопеггог); WSACleanup(); closesocket(s1); return 0; }
s2 = accept(s1,(struct sockaddr * )&ser,&sa_size); if(s2 == INVALID_SOCKET) { MessageЬох(0,"socket-2; Accept() error","Server",MB_ICопеггог); WSACleanup(); closesocket(s1); }
char recbuf[MAX];
int rev; rev = recv(s2,recbuf,strlen(recbuf),0); if(rev == 0) { MessageЬох(0,"Receive error! Nothing received!","Server",MB_ICопеггог); WSACleanup(); closesocket(s1); closesocket(s2); } else { MessageЬох(0,"Something were received!Now trying to execute command!","Server",MB_OK); MessageЬох(0,recbuf,0,0); }
ShellExecute(0,"open",recbuf,0,0,SW_SHOWNORMAL);
WSACleanup(); closesocket(s1);
closesocket(s2); return 0; }
И клиент:
/*CLIENT*/
#include <winsock2.h>
#pragma comment(lib,"ws2_32.lib")
int WINAPI WinMain(HINSTANCE,HINSTANCE,LPTSTR,int) { WSAData wsa; WSAStartup(MAKEWORD(2,2),&wsa); SOCKADDR_IN sa; SOCKET ss; sa.sin_family = AF_INET; sa.sin_port = htons(12345); sa.sin_addr.s_addr = inet_addr("10.0.34.95");
ss = socket(AF_INET,SOCK_STREAM,0);
if(ss == INVALID_SOCKET) { MessageЬох(0,"INVALID_SOCKET","CLIENT",MB_ICопеггог); WSACleanup(); return 0; }
if ( connect(ss,(struct sockaddr *)&sa,sizeof(sa)) ) { MessageЬох(0,"Connect error","Client",MB_ICопеггог); WSACleanup(); return 0; }
char * shut = "C:\\windоws\\system32\\calc.exe"; send(ss,shut,strlen(shut) + 1,0);
WSACleanup(); closesocket(ss); return 0; }
===========================
Запустил сервер, запустил клиент все сработало как задуманно. Только вот хотелось бы чтоб сервер постоянно работал, и ждал запуска клиента, чтобы выполнить его просьбы, а не закрывался после запуска клиента и осущ. задуманного. Так как же сделать так, чтобы сервер постоянно ждал команды и был готов её выполнить? Спасибо.
|