/*server端*/
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<winsock2.h>
#pragma comment(lib,"ws2_32.lib")
int main()
{
/*初始SOCKET库*/
WSADATA WSAData;
if(WSAStartup(MAKEWORD(2,2),&WSAData)!=0)
{
printf("初始化失败!错误代码:\n",WSAGetLastError());
return -1;
}
/*创建套接字*/
SOCKET sockListen=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if(sockListen==INVALID_SOCKET)
{
printf("创建套接字失败!错误代码:\n",WSAGetLastError());
return -1;
}
/*设置IP及端口*/
SOCKADDR_IN sa;
sa.sin_family= AF_INET; /*设置TCP/IP协议族*/
sa.sin_port = htons(5000); /*设置端口为5000*/
sa.sin_addr.S_un.S_addr=INADDR_ANY; /*设置IP地址。INADDR_ANY表示所有地址,一般服务器才这么设置*/
/*将一本地地址与一套接口捆绑*/
if(bind(sockListen,(LPSOCKADDR)&sa,sizeof(sa))==SOCKET_ERROR)
{
printf("绑定失败!错误代码:%d\n",WSAGetLastError());
return -1;
}
/*设置并监听*/
if(listen(sockListen,10)==SOCKET_ERROR)/*最大监听数为10*/
{
printf("监听失败!错误代码:%d\n",WSAGetLastError());
return -1;
}
/*接收与发送数据*/
SOCKET dataClient;
SOCKADDR_IN clienAddr;
int addrLen=sizeof(clienAddr);
int recvLength;
char recvData[1024];
char sendData[1024];
ZeroMemory(recvData,sizeof(recvData)/sizeof(char));
ZeroMemory(sendData,sizeof(sendData)/sizeof(char));
printf("等待连接...\n");
while(1)
{
dataClient=accept(sockListen,(SOCKADDR *)&clienAddr,&addrLen);
recvLength=0;
if(dataClient==INVALID_SOCKET)
{
printf("连接失败!错误代码:%d\n",WSAGetLastError());
continue;
}
printf("连接已建立,连接IP:%s\n等待命令\n",inet_ntoa(clienAddr.sin_addr));
/*接收数据*/
recvLength=recv(dataClient,recvData,sizeof(recvData),0);
if(recvLength>0)
{
recvData[recvLength]='\0';
if(system(recvData)==0)/*执行命令*/
{
strcpy(sendData,"命令执行成功!\n");
printf("命令:%s执行成功!\n",recvData);
/*发送数据*/
send(dataClient,sendData,strlen(sendData),0);
}
else
{
strcpy(sendData,"命令执行失败!\n");
printf("命令:%s执行失败!\n",recvData);
/*发送数据*/
send(dataClient,sendData,strlen(sendData),0);
}
}
closesocket(dataClient);
}
closesocket(sockListen);
WSACleanup();
return 0;
}