依睛(IT blog) 我回来了,PHP<-->C/C++ LINUX

笨鸟

导航

<2008年1月>
303112345
6789101112
13141516171819
20212223242526
272829303112
3456789

留言簿(26)

随笔分类(315)

文章分类(5)

收藏夹

随笔档案(330)

文章档案(11)

相册

阅读排行榜

评论排行榜

统计

积分与排名

友情连接

最新评论

socket http 请求 HttpClient 源代码

不知怎传压缩包, 下次会了传压缩包. 这程序都能运行的. 
HTTP 协议分析才做到这一步. 
我可提供一点信息不错的地址, 看了再看我程序.:
(1))HTTP地址: http://www.nettoapp.com/Article/ShowArticle.asp?ArticleID=222
(2)HTTP协议状态码的含义地址:  http://blog.csdn.net/kt400_hhx/archive/2007/05/31/1633451.aspx
(3) )HTTP地址: http://blog.csdn.net/guoguo1980/archive/2008/07/14/2649658.aspx

还有好多, 就不说啦, 总之一句话多用GOOGLE , 学会用, 以前我都不太用它,
有好多朋友说我怎不用GOOGLE上找. 

如果不会先看, 看多了自然就会了.

这是自己写的一个源代码:
/**************************************
*  HttpClient connection Server

* http protocol
*/

#include <windows.h>
#include <iostream>
#pragma comment(lib, "ws2_32")

using namespace std;
#define LEN  1024
int main()
{


 
 int  i=0;
 char buf1[4096];
 WORD wdVersionRequired;
 WSADATA wsaData;

 char saddress[100]="http://127.0.0.1:8080/cgi-bin/tt.cgi";

  char protocolHead[]="GET  /cgi-bin/tt.cgi  HTTP/1.1\r\n"
       "Accept: */*\r\n"
      "Accept-Language: zh-cn,zh; q=0.5\r\n"   //这  "\r\n" 不能丢一个. 不然程序不对.
      "User-Agent: EasyAgent/1.01\r\n"
      "Connection: Keep-Alive\r\n"
      "Accept-Encoding: gzip, deflate\r\n"
      "Host: 127.0.0.1:8080\r\n\r\n";              // 表示HTTP 结束符\r\n\r\n
 

 printf("\n %s\n ", protocolHead);
     int status;
     char recvBuf[4096]=""; 
   
 wdVersionRequired = MAKEWORD(2, 2);  /* 2.2掳姹?*/
 WSAStartup(wdVersionRequired, &wsaData);


 
 SOCKET s = socket(AF_INET, SOCK_STREAM, 0);
 if (SOCKET_ERROR == s)
 {
  return 0;
 }

 sockaddr_in    saServer;
 memset(&saServer, 0, sizeof(saServer));
 saServer.sin_family = AF_INET;
 saServer.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
 saServer.sin_port = htons(8080);

 if(connect(s, (const sockaddr*)&saServer, sizeof(sockaddr)) != 0)
 {
  perror("error");
  exit(-1);
 }

 if(0 == send(s, protocolHead, sizeof(protocolHead), 0))  //send server
 {
  perror("error");
 
 }
   

  struct timeval tm = {20,7};
     fd_set fds_r;
     FD_ZERO(&fds_r);
     FD_SET(s,&fds_r);

 status=select(s+ 1, &fds_r, 0, 0, &tm); //socketId在这里是最大的fd
    
 if(status > 0 && FD_ISSET(s, &fds_r))
 {
  printf("Socket is readable...fd=[%d]\n",s);
  
  while(1)
  {
   memset(recvBuf, 0, sizeof(recvBuf));
   if (recv(s,recvBuf,4096,0)==0)
   {
    break;
   }
   printf("\n%s\n", recvBuf);

  }
 }

// recv(s, buf1, sizeof(buf1), 0);
// printf("buf1: %s\n", buf1);
 printf("send success!\n");

 WSACleanup();
 closesocket(s);

 return 1;
}

===========================================================
要说一点:   HTTP/1.0 200 OK  表示成功接收.
 
运行结果DOS窗口: 

 GET  /cgi-bin/tt.cgi  HTTP/1.1
Accept: */*
Accept-Language: zh-cn,zh; q=0.5
User-Agent: EasyAgent/1.01
Connection: Keep-Alive
Accept-Encoding: gzip, deflate
Host: 127.0.0.1:8080


 Socket is readable...fd=[1952]

HTTP/1.0 200 OK 


X-Powered-By: CSP/eybuild-2.6.8
Content-Type: text/html

<html>
<head>
<title></title>
</head>
<body>
hello world
<img src="?.=00001000" />

</body>
</HTML>


send success!
Press any key to continue

posted on 2008-10-15 13:41 向左向右走 阅读(3441) 评论(2)  编辑 收藏 引用 所属分类: C/C++学习资料库

评论

# re: socket http 请求 HttpClient 源代码[未登录] 2009-11-26 17:39 lin

看了你的程序启发很大,可是还是没有成功,能不能进一步得到你的帮助  回复  更多评论   

# re: socket http 请求 HttpClient 源代码 2009-12-15 15:12 水竹

你的字符串数组定义不正确 protocolHead[]缺少{}  回复  更多评论   

只有注册用户登录后才能发表评论。