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;
}