程序写于20130418 20岁生日
服务器端:
// server.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
#include <winsock2.h>
#include <string>
#include <stdio.h>
#include <windows.h>
#pragma comment(lib,"ws2_32.lib")
using namespace std;
int main()
{
string command;
WSADATA data;
WSAStartup(MAKEWORD(2,2),&data);
SOCKET s = socket(AF_INET,SOCK_STREAM,0);
SOCKADDR_IN server;
server.sin_family = AF_INET;
server.sin_addr.S_un.S_addr = htonl(0);
server.sin_port = htons((short)4444);
bind(s,(SOCKADDR*)&server,sizeof(SOCKADDR));
listen(s,5);
SOCKADDR_IN conclient;
int length = sizeof(conclient);
char recvbuf[50]={'a'}; //我怕没收到数据,就初始化一个数据进行判断,看看效果如何
while(1)
{
SOCKET sc=accept(s,(SOCKADDR*)&sc,&length);
recv(sc,recvbuf,50,0);
command = (string)recvbuf;
cout << "---------------------------------------------" << endl;
system(command.c_str());
cout << "---------------------------------------------" << endl;
cout << " pragma by shaoyongyang " << endl;
}
return 0;
}
客户端:
// client.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
#include <winsock2.h>
#include <stdlib.h>
#include <string>
#pragma comment(lib,"ws2_32.lib")
using namespace std;
int main()
{
//用于强制类型转换发送所需要的参数 参数必须为char 类型;
WSADATA data;
WSAStartup(MAKEWORD(2,2),&data);
SOCKET cs = socket(AF_INET,SOCK_STREAM,0);
SOCKADDR_IN client;
client.sin_family = AF_INET;
client.sin_addr.S_un.S_addr = inet_addr("10.1.12.5");
client.sin_port = htons(4444);
while(1)
{
string command="net";
cout << "---------------Please Input Command------------------" << endl;
cout << ">>";
getline(cin,command);
char* str =const_cast<char*>(command.c_str());
connect(cs,(SOCKADDR*)&client,sizeof(SOCKADDR));
send(cs,str ,strlen(str),0);
}
return 0;
}
//客户端之所以写成无限循环,是为了不停地给服务器端发送命令。
功能:服务端启用程序,即进入监听状态,采用端口4444。当客户端进入连接,便提示发送DOS命令。
总结:程序效果不是太好,输入一次DOS命令执行过后,后面的命令有几率的执行。这点很纠结。待完善。