c++实现http协议模仿get方法访问tomcat

最近想连接下http协议底层的实现原理,就在网上找资料使用C++套接字模仿了http协议,闲话不多说,直接上代码:



#include <Winsock2.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#pragma comment(lib,"ws2_32.lib")

/*封装一个遵守Http协议的字符串
模拟GET请求
p : 要请求的地址
p1:模仿Http协议的字符串
 */
void package(char *p, char *p1)
{
    char *pHttpGet = "GET %s?%s HTTP/1.1\r\n"
    "Host: %s:%d\r\n\r\n";
    char *addr = p;
    char *host = "127.0.0.1";
    int port = 8080;
    char *msg = "aaa=wanshengdao&bbb=123456";
    char strHttpGet[1024] = {0};
    sprintf(strHttpGet, pHttpGet, addr, msg, host, port);
    //strcpy(strHttpGet, p1);
    strcpy(p1, strHttpGet);
}
/*使用TCP协议连接,并发送信息*/
int link()
{
    WSADATA wsaData;
    WORD wVersionRequested;
    wVersionRequested = MAKEWORD(1, 1);
    int err = WSAStartup(wVersionRequested, &wsaData);
    if( err != 0)
    {
        return 0;
    }
    if( LOBYTE(wsaData.wVersion) != 1 || HIBYTE( wsaData.wVersion) != 1)
    {
        WSACleanup();
        return 0;
    }
    SOCKET sockClient = socket(AF_INET, SOCK_STREAM, 0);

    SOCKADDR_IN addrSrv;
    addrSrv.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
    addrSrv.sin_family = AF_INET;
    addrSrv.sin_port = htons(8080);
    connect(sockClient, (SOCKADDR*)&addrSrv, sizeof(SOCKADDR));
    char content[1024] = {0};
    /*这是我自己的测试tomcat写的界面*/
    package("http://localhost:8080/SocketRequair/Test.jsp", content);
    printf("%s", content);
    send(sockClient, content, strlen(content)+1, 0);
    char recvBuf[1024] = {0};
    /*接收来自tomcat返回的页面*/
    recv(sockClient, recvBuf, 1024, 0);
    printf("%s\n", recvBuf);
    closesocket(sockClient);
    WSACleanup();
    return 1;

}

int main()
{
    int status = link();
    if( !status ) {
        printf("连接错误!");
        exit(0);
    } 
    system("pause");
    return 0;
}

上面是c++代码,下面是效果图:
这里写图片描述

这里写图片描述

下面是jsp代码,抱歉,我好像上不了代码,只能上图片了:
这里写图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值