在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
1 #include "stdafx.h" //控制台应用自带头文件,能够加快编译的速度
2 #include<winsock2.h> //通过该头文件调用winsock的函数,如下文的WSAStartup、bind()、connect()、inet_addr()等
3 #include<windows.h> //调用windows内核及接口函数
4 #include<stdio.h>
5 #include<stdlib.h>
6 #include<assert.h>
7 #pragma comment(lib,"ws2_32") //说明需要使用win32的库
8
9 int main(int argc, char* argv[]) {
10 int i;
11 SOCKET fd; //套接字初始化
12 SOCKADDR_IN addr; //该结构体初始化可以让我们对 “协议簇类型、网络地址、端口号”进行操作
13 WSADATA wsadata;
14
15 i = WSAStartup(0x0202, &wsadata); //说明Win32库的版本及对象
16 fd = socket(PF_INET, SOCK_STREAM, 0); //协议类型、地址、端口号的初始化
17 addr.sin_addr.S_un.S_addr = 0;
18 addr.sin_family = AF_INET;
19 addr.sin_port = 0;
20
21 i = bind(fd, (sockaddr*)&addr, sizeof(SOCKADDR_IN)); //将上文的套接字进行绑定
22
23 addr.sin_addr.S_un.S_addr = inet_addr("202.119.224.201"); //确定IP地址和端口号
24 addr.sin_port = ntohs(80);
25
26 i = connect(fd, (sockaddr*)&addr, sizeof(SOCKADDR_IN)); //尝试进行TCP三次握手
27 if (i == NOERROR) {
28 char *Buffer = new char[8193];
29 i = sprintf(Buffer, "GET / HTTP/1.1\r\n" //HTTP协议的语法格式
30 "Host:www.njupt.edu.cn\r\n"
31 "User-Agent:whatever\r\n"
32 "Accept-Type:*/*\r\n"
33 "Connection:close\r\n"
34 "X-Power:XXX\r\n\r\n"); //注意这里要空一行,因为HTTP头与体之间需要空一行进行区分
需要明确两个概念: 网络字节:指的是网络字节顺序,它是TCP/IP协议中规定的字节顺序,通常采用大端排序
主机字节:主机中内存地址顺序。排序方式与CPU 操作系统有关。
结构体说明:
SOCK_STREAM,流套接字用于提供可靠有连接的数据传输服务,能够保证无差错、有顺序、无重复接收,使用TCP协议。
SOCKET,套接字结构体
SOCKADDR_IN, 看一看它的结构相信就能够有所理解了
struct SOCKADDR_IN{
short int sin_family; //通信协议类型族
unsigned short int sin_port; //端口号
struct in_addr sin_addr; //IP地址
unsigned char si_zero[8]; //填充0以保持与sockaddr结构的长度相同,这个暂时用不着
}
代码中所说的HTTP结构需要空一行的原因用两个个图说明:
争取下周把服务器的代码也放出来 |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论