#include<iostream>
#include<sstream>
#include<string.h>
#include<time.h>
#include<stdlib.h>
#include<unistd.h>
#include<mysql/mysql.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<netdb.h>
using namespace std;
int s_num = 5;
char stock[][10]={"000001","600000","600005","600006","600007"};
// 上證指數,浦發銀行,武鋼股份,東風汽車,中國國貿
int main(int argc,char *argv[])
{
time_t tval;
struct tm *now;
tval = time(NULL);
now = localtime(&tval);
char str[1024];
int i;
double d;
int i1;
char ch;
MYSQL my_connection;
MYSQL_RES *result;
MYSQL_ROW row;
mysql_init(&my_connection);
struct hostent *server;
stringstream sstr,recvstr;
char strss[1024];
char zd[33][50];
int fd=socket(AF_INET,SOCK_STREAM,0);
if(fd==-1) printf("sockett err:%m\n"),exit(-1);
printf("socket ok!\n");
struct sockaddr_in addr;
addr.sin_family=AF_INET;
addr.sin_port=htons(80);
server = gethostbyname("hq.sinajs.cn");
memcpy((char *)&addr.sin_addr.s_addr,(char*)server->h_addr, server->h_length);
int r=connect(fd,(struct sockaddr*)&addr,sizeof addr);
if(r==-1) printf("connect err:%m\n"),exit(-1);
printf("connect ok!\n");
//同時獲得多個個股信息
sstr << "GET /?list=";
for (i=0; i<s_num; i++)
{
sstr << "sh";
sstr << stock[i];
if (i != s_num-1)
sstr << ",";
}
sstr << " HTTP/1.1\r\nHost: hq.sinajs.cn\r\nConnection: Close\r\n\r\n";
cout << "debug:" << sstr.str();
write(fd,sstr.str().c_str(),sstr.str().length());
//阻塞read一直讀取直到fd被超時關閉
while(read(fd,&ch,1))
{
recvstr << ch;
}
close(fd);
cout << recvstr.str() << endl;
//因為本人習慣於使用stream類型保存便於以後getline和處理
if (mysql_real_connect(&my_connection, "0.0.0.0","user", "passwd", "datadb", 0, NULL, 0))
{
printf("[%04d%02d%02d%02d%02d%02d] Connection success\n",now->tm_year+1900, now->tm_mon+1, now->tm_mday, now->tm_hour, now->tm_min, now->tm_sec);
}
else
{
printf("[%04d%02d%02d%02d%02d%02d] Connection failed\n",now->tm_year+1900, now->tm_mon+1, now->tm_mday, now->tm_hour, now->tm_min, now->tm_sec);
return -1;
}
recvstr.getline(strss, 1024);
i = 0;
while(!recvstr.eof()&&!recvstr.fail())
{
if((strstr(strss,"var hq_str_sh") != NULL) && (strstr(strss,stock[i]) != NULL))
{
//======數據庫處理過程已省略======
//======數據庫處理過程已省略======
i++;
}
if (i == s_num) break;
memset(strss, 0x00, 1024);
recvstr.getline(strss, 1024);
}
mysql_close(&my_connection);
return 0;
}