原理很简单,采用数据包提交的方式提交到服务端。
一下是源代码:(Ubuntu13.04 64位 Linux)
#include <iostream>
#include <fstream>
#include <stdlib.h>
#include <stdio.h>
#include <errno.h>
#include <string.h>
#include <unistd.h>
#include <netdb.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <sys/types.h>
#include <arpa/inet.h>using namespace std;typedef void (*FUNC)(const char*);char* GetData(const string& filename="data.dat");
void SendData(const char* buf,const string& host,FUNC fun=NULL);
void ChkRet(const char* rcv);
void WriteData(const char* buf,int size,const string& filename);
void PrintFrame(const string& str="unknow");int main(int argc,char *argv[])
{try{char *dat=argc>=3?GetData(string(argv[2])):GetData();string host=argc>=2?argv[1]:"10.0.17.130";int slptime=argc>=4?atoi(argv[3]):1;while(true){try{SendData(dat,host,ChkRet);}catch(const char* info){PrintFrame(string(info)+string("ntPlease check your network."));}sleep(slptime);}delete[] dat;}catch(const char* info){cerr<<info<<endl;}return 0;
}char* GetData(const string& filename)
{ifstream fs;fs.open(filename.c_str(),ios::in|ios::binary);if(!fs) throw "Cannot open the data file";fs.seekg(0,ios::end);long flenllg();if(flen==0) throw "The data file is empty";fs.seekg(0,ios::beg);char *buf=new char[flen];fs.read(buf,flen);fs.close();return buf;
}void SendData(const char* buf,const string& host,FUNC fun)
{hostent *pURL = gethostbyname(host.c_str());if(pURL==NULL) throw "Cannot get hostname!!!";sockaddr_in addr;addr.sin_family = AF_INET;addr.sin_addr.s_addr = *((unsigned long*)pURL->h_addr);addr.sin_port = htons(80);//Connectint sockfd = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);if(sockfd==-1) throw "socket error";if(connect(sockfd,(struct sockaddr *)&addr,sizeof(addr))==-1){close(sockfd);throw "Cannot connect the host!!!";}static char header[1024];sprintf(header,buf,host.c_str());//cout<<strlen(header)<<endl;if(send(sockfd, header, strlen(header), 0)==-1){close(sockfd);throw "Sending data error!!!";}static char pagebuf[BUFSIZ+1];if(fun){int rcvrt;rcvrt=recv(sockfd,pagebuf,BUFSIZ,0);rcvrt=recv(sockfd,pagebuf,BUFSIZ,0);pagebuf[rcvrt]='