网络协议是通信计算机双方都必须遵从的一组约定。它的三要素:语法、语义、时序。
TOP 1:TCP/IP
传输控制协议
Q1:什么是TCP/IP
传输控制协议
指能够在多个不同网络间实现信息传输的协议簇。
TCP/IP
协议不仅仅指的是TCP和IP两个协议,而是指一个由FTP、SMTP、TCP、UDP、IP等协议构成的协议簇,只是因为在TCP/IP
协议中TCP协议和IP协议最具代表性,所以称为TCP/IP
协议
TCP:相当于打电话,及时性
UDP:相当于写信,不管你接不接受
TOP 2:端口
Q1:什么是端口
物理端口:电脑网口,USB等I/O接口
虚拟端口:程序和网络进行通信的端口,端口是进行通信的必经之路
Q2:端口号
端口是通过端口号进行标记的,端口号只有整数,范围是0~65535,存储长度是short型,2个字节,一个字节8个位,范围是2^16-1
Q3:端口的分配
Q4:常见端口
知名端口是众所周知的端口号,范围从0到1023
80端口分配给HHTP
服务
21端口分配给FTP
服务
22端口控制远程通信
Q5:动态端口
动态端口范围是从1024到65535
之所以称之为动态端口,是因为它一般不固定分配给某种服务,而是动态分配。
动态分配是指当一个系统进程或应用程序进程需要网络通信时,它需要向主机(操作系统)申请一个端口,主机从可用的端口号中分配一个供他使用。当这个进程被关闭时,同时也就释放了所占用的端口号。
TOP 3:TCP服务器
类似于手机通话
过程:
1、买个手机
2、插上手机卡(电话号码)
3、设计手机为正常接听状态
4、静静的等着别人拨打
TCP服务
在程序中,如果要完成上面的手机通话过程,需要的流程如下:
1、socket创建一个套接字
2、bind绑定ip和port
3、listen使套接字变为被动链接
4、accept等待客户端的链接
5、
recv/send
接收发送数据
TOP 4:HHTP协议
HTTP协议即超文本传送协议,时Web联网的基础,也是手机联网常用的协议之一,HTTP协议是建立在TCP协议之上的一种应用。
经典的HTTP事务处理有如下的过程:
(1)客户与服务器建立连接;
(2)客户端向服务器提出请求;
(3)服务器接受请求,并根据请求返回相应的文件作为应答;
(4)客户与服务器关闭连接。
HTTP请求数据方法:GET、HEAD、POST、PUT等
每种请求规定不同的信息交换方式
#include<stdio.h>
#include<Winsock2.h>//包括网络编程的头文件,引入静态库
#pragma comment(lib, "ws2_32.lib")
int merror(int redata, int error, char* showinfo) {
if (redata == error) {
perror(showinfo);
getchar();
return - 1;
}
return 0;
}
int main() {
printf("Hello world!!\n");
WSADATA wsdate;
int isok = WSAStartup(MAKEWORD(2, 2), &wsdate);//确定socket版本信息
//short两个字节 2.2
merror(isok, WSAEINVAL, "申请scoket失败");
//第一个:协议簇,决定socket的地址类型
//第二个:传输类型,SOCK_STREAM 流传输
//第三个:指定的传输协议,tcp
SOCKET server = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
merror(server, INVALID_SOCKET, "创建scoket失败");
struct sockaddr_in seraddr;
seraddr.sin_family = AF_INET;//和创建的时候必须一样 ipv4
seraddr.sin_port = htons(80);//注意:网络中的数据和电脑上的数据存储是有区别的,网络是大端存储,pc是小端存储
seraddr.sin_addr.s_addr = INADDR_ANY;//监听任意地
isok = bind(server, &seraddr, sizeof(seraddr));
merror(isok, SOCKET_ERROR, "绑定失败..\n");
isok = listen(server, 5);
merror(isok, SOCKET_ERROR, "监听失败..\n");
struct sockaddr_in claddr;
int cllen = sizeof(claddr);
while (1) {
SOCKET client = accept(server, &claddr, &cllen);//谁连接进来了
merror(client, INVALID_SOCKET, "连接失败。。\n");
char revdata[1024] = "";
recv(client, revdata, 1024, 0);
printf("%s 共接受到%d字节数据\n", revdata, strlen(revdata));
char sendata[1024] = "你好,我是BUI bill";
send(client, sendata, strlen(sendata), 0);
closesocket(client);
}
closesocket(server);
WSACleanup();
getchar();
return 0;
}
127.0.0.1是本地IP地址,通过向本地IP地址发送请求,然后接收完成程序测试。