C++ HTTP 客户端


2015.01.13

// ConsoleApplication2_HttpClient.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <string.h>


/*
* 客户端
*/

#include<Winsock2.h>   
#include<stdio.h>   
#pragma comment(lib,"Ws2_32.lib")











int main2(){
	
    SOCKET      sSocket      = INVALID_SOCKET;
    SOCKADDR_IN stSvrAddrIn = {0}; /* 服务器端地址 */
    char        sndBuf[1024] = {0};
    char        rcvBuf[2048] = {0};
    char       *pRcv         = rcvBuf;
    int         num          = 0;
    int         nRet         = SOCKET_ERROR;

	int         nSend         = NULL ;
 
    WSADATA     wsaData;
 
    /* HTTP 消息构造开始,这是程序的关键之处 */
    sprintf( sndBuf, "POST / HTTP/1.1\n");
    strcat( sndBuf, "Host: localhost\n");
    strcat( sndBuf, "Path: trafficSynchronization/gps/sendTest.jsp\n\r\n");
	//strcat( sndBuf, "Host: localhost\n\r\n");
	//strcat( sndBuf, "Host: localhost/n/r/n");
    /* HTTP 消息构造结束 */
	
    /* 发送内容 */
    printf("\nsndBuf = %s\n", sndBuf);
      
    /* socket DLL初始化 */
    WSAStartup(MAKEWORD(2, 0), &wsaData);
 
    stSvrAddrIn.sin_family      = AF_INET;
    stSvrAddrIn.sin_port        = htons(8080);
    // stSvrAddrIn.sin_addr.s_addr = inet_addr("202.108.9.51");
    // stSvrAddrIn.sin_addr.s_addr = inet_addr("60.207.246.98");
	// stSvrAddrIn.sin_addr.s_addr = inet_addr("192.168.100.1");
	stSvrAddrIn.sin_addr.s_addr = inet_addr("192.168.1.133");
	// stSvrAddrIn.sin_addr.s_addr = inet_addr("localhost");
	// stSvrAddrIn.sin_addr.s_addr = inet_addr("217.147.180.114");



	printf("\n准备进行 socket() 连接!\n");
 
    sSocket = socket( AF_INET, SOCK_STREAM, IPPROTO_TCP);
	   
	if( sSocket == INVALID_SOCKET ){
		printf("\nsocket 失败!");
		printf("\n回车键继续 ...\n");
		getchar();
		return -1 ;
	}
	
	printf("\nsocket 成功!\n");
	//printf("\n回车键继续 ...\n");
	//getchar();

 
    /* 连接 */
    nRet = connect(sSocket, (SOCKADDR*)&stSvrAddrIn, sizeof(SOCKADDR));
    if ( SOCKET_ERROR == nRet )
    {
		printf("connect fail!/n");
		printf("\n回车键继续 ...\n");
		getchar();
            return -1;
    }

	/*
		Connection 成功!
	*/
	printf("\nconnect 成功!\n");
	//printf("\n回车键继续 ...\n");
	//getchar();


      
    /* 发送HTTP请求消息 */
    nSend = send(sSocket, (char*)sndBuf, sizeof(sndBuf), 0);
	   
	if( nSend == NULL || nSend <= 0 ){
		printf("\nsend 失败!");
		printf("\n回车键继续 ...\n");
		getchar();
		return -1 ;
	}

	/*
		send 成功!
	*/
	printf("\nsend 成功!\n"); 
	//printf("\n回车键继续 ...\n");
	//getchar();

 
    /* 接收HTTP响应消息 */
    // while(1)
    // {
		printf("\n.");
        num = recv(sSocket, pRcv, 2048, 0);
		printf("\nnum = %d", num );
 
        //pRcv += num;
 
        //if((0 == num) || (-1 == num))
        //    {
        //            break ;
        //    }
    // }
      
       /* 打印响应消息 */
       printf("\n%s\n", rcvBuf);
 
	/*
		显示接收信息 成功!
	*/
	printf("\n回车键继续 ...\n");
	getchar();

    return 0;

}

void main1()   
{   

  WORD   wVersionRequested;   
  WSADATA   wsaData;   
  int   err;   
  char * sendData ;


  
       char        rcvBuf[2048] = {0};
       char       *pRcv         = rcvBuf;
       int         num          = 0;
       int         nRet         = SOCKET_ERROR;


    
  wVersionRequested = MAKEWORD( 2, 2 );
    
  err = WSAStartup( wVersionRequested, &wsaData );   
  if( err != 0 ){   
     return;   
  }   
    
    
  if( LOBYTE(wsaData.wVersion) != 2 ||
      HIBYTE(wsaData.wVersion) != 2 ){   
     
      WSACleanup();   
      return;     
  }   

  /*
	socket 连接
  */
  SOCKET sockClient = WSASocket( AF_INET, SOCK_STREAM, 0, NULL, 0, WSA_FLAG_OVERLAPPED );

  SOCKADDR_IN   addrClient;   // 服务器地址信息

  addrClient.sin_addr.S_un.S_addr = inet_addr("192.168.100.1"); // 要连接的服务地址
  addrClient.sin_family = AF_INET; // 协议族  
  addrClient.sin_port = htons(80);  // 请求的端口 
    
  char  sendBuffer[1024];   // 每次发送的最大数据量
  nRet = connect( sockClient, (SOCKADDR*)&addrClient, sizeof(SOCKADDR) ); // 连接服务器端   

  if( nRet == NULL ){
	printf("\n连接失败!");
	printf("\n回车键继续 ...\n");
	getchar();
	return ;
  }

	printf("\n已连接,nRet = ");
	printf( (char*)nRet );
	printf("\n回车键继续 ...\n");
	getchar();
  
    /*send   data   to   service*/   
    //printf("Please   input   data:\n");   
	//sendData = gets(sendBuffer);
    //printf( strcat( sendData , " - Please   input   data:\n"));  

  //while(true)   
  //{   

    // printf("%s/n", sendBuffer);
	
    if( gets( sendBuffer ) == NULL)  // 输入要发送的数据 
		printf("NULL\n");  
		// break;   
    else   
    {   
      if( SOCKET_ERROR == send(sockClient,sendBuffer,
          strlen(sendBuffer)+1, 0 )) // TCP方式发送  
      {   
         printf("Transmission data defeat!\n");   
         // break;   
      } 
	  else{
		  printf( sendBuffer );
	  }
    }   
  // }   


         /* 接收HTTP响应消息 */
       while(1)
       {
			printf(".");
              num = recv(sockClient, pRcv, 2048, 0);
 
              pRcv += num;
 
           if((0 == num) || (-1 == num))
              {
                     break ;
              }
       }
      
       /* 打印响应消息 */
       printf("%s/n", rcvBuf);

	   
  closesocket( sockClient );    // 严格来说这里需要加错误检测 if(0 != closesocket(socket)){}
  WSACleanup();   

  
	printf("\n回车键退出 ...\n");
	getchar();

	return ;

}


转载于:https://my.oschina.net/Livon/blog/366793

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值