windows 下开发 c++利用socket 请求http

RedPandaIDE 中新建项目 网络中 有示例源码

链接器加上 -lws2_32
在这里插入图片描述
前提是环境中有lws2_32
在这里插入图片描述
调试窗口中能看到 -lws2_32
g++.exe -c main.cpp -o main.o -g3 -pipe -Wall -D__DEBUG__

g++.exe winmain.o main.o -o win1.exe -lwinhttp -lws2_32

#include <winsock2.h>
#include <cstdio>
#include <string.h>

//#pragma comment(lib, "ws2_32.lib") 不起作用

SOCKET CreateSocket() {
    // 创建一个socket
    SOCKET s = socket(AF_INET, SOCK_STREAM, 0);
    if (s == INVALID_SOCKET) {
        // 错误处理
        return INVALID_SOCKET;
    }
//    https://ziyuan.baidu.com/linksubmit/url?sitename=http%3A%2F%2Fsite%3Am.hxue.cn
    // 填充服务器地址
    struct sockaddr_in server;
    server.sin_addr.s_addr = inet_addr("127.0.0.1"); // 服务器IP地址
    server.sin_family = AF_INET;
    server.sin_port = htons(80); // HTTP 默认端口
    
    // 连接到服务器
    if (connect(s, (struct sockaddr*)&server, sizeof(server)) < 0) {
        // 错误处理
        closesocket(s);
        return INVALID_SOCKET;
    }
    
    return s;
}

int main() {
    WSADATA wsaData;
    WORD wVersionRequested = MAKEWORD(2, 2);
    int wsResult = WSAStartup(wVersionRequested, &wsaData);
    if (wsResult != 0) {
        printf("Failed to init socket!\n");
        // 错误处理
        return 1;
    }
     printf("successed to init socket!\n");
    // ... WSAStartup 代码
    
    SOCKET sock = CreateSocket();
    if (sock == INVALID_SOCKET) {
        // 错误处理
        WSACleanup();
        return 1;
    }
    
    // 发送HTTP GET请求
    const char* request = "GET / HTTP/1.1\r\n"
    "Host: www.baidu.com\r\n"
    "Connection: close\r\n\r\n";
    //  /linksubmit/url?sitename=http%3A%2F%2Fsite%3Am.hxue.cn
    int sent = send(sock, request, strlen(request), 0);
    if (sent < 0) {
        // 错误处理
        closesocket(sock);
        WSACleanup();
        return 1;
    }
    
    // 接收响应
    char buffer[1024];
    int recvBytes;
    while ((recvBytes = recv(sock, buffer, sizeof(buffer) - 1, 0)) > 0) {
        buffer[recvBytes] = '\0'; // 确保字符串以null结尾
        printf("%s", buffer); // 打印响应内容
    }
    
    // 关闭socket和清理Winsock
    closesocket(sock);
    WSACleanup();
    
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值