2021-09-13

网络协议是通信计算机双方都必须遵从的一组约定。它的三要素:语法、语义、时序。

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地址发送请求,然后接收完成程序测试。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值