华清远见嵌入式培训_第七周回顾与反思(下)

本文回顾了网络编程课程的精华,涵盖了TCP/IP协议、TCP与UDP的异同、TCP与UDP网络编程流程,以及TCP粘包问题和TFTP协议。通过对网络基础知识、TCP和UDP的深入探讨,强调了网络编程在实际工作中的重要性,并提倡通过实践提高编程逻辑能力。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

前言

周四

一、网络编程概述

1、协议就是指通信双方约定好的数据发送和接受以及解析的规则。

2、网络的发展阶段可分为四个:

 二、网络基础知识

1、字节序

2、如何判断自己的主机是大端存储还是小端存储

3、什么情况需要转换字节序,什么情况不需要

4、字节序转换的函数

5、socket函数

6、IP地址

7、端口号

三、TCP/UDP的概念和异同

1、TCP(即传输控制协议)概念:

2、UDP(User Datagram Protocol)概念:

3、TCP/UDP的异同

四、TCP网络编程

1、TCP网络模型

2、TCP网络编程流程

3、函数说明

4、搭建简易循环服务器及代码

周五

一、TCP网络编程注意事项

1、TCP的粘包问题

二、UDP网络编程

1、UDP网络编程流程

2、recvfrom 函数

3、sendto 函数

4、简单UDP服务器模型的实现

三、TFTP协议

总结


前言

        连续七天课中的最后两天,开了一门新课:网络编程,课程为时八天,最后一天需要利用到目前为止所有学到的内容,独立完成一个综合项目。

        这两天的学习的主要内容有:第一天,网络编程概述、网络基础知识和TCP网络编程;第二天,UDP网络编程。

        这两天的重点难点有:开放系统互联模型的结构TCP/IP协议族体系的结构以及体系中各层次的协议TCP和UDP的异同,以及TCP和UDP网络编程的使用

        网络编程的课程特点是:框架较为固定,更加注重思维逻辑,代码量较大,本次总结将围绕这两天的重点难点,深化理论知识理解、强化TCP和UDP网络编程的代码逻辑。

周四

一、网络编程概述

1、协议就是指通信双方约定好的数据发送和接受以及解析的规则。

2、网络的发展阶段可分为四个:

        1、ARRAnet阶段

                使用的协议为NCP(network control protocol),特点是不能互联不同类型的计算机和不同类型的系统,没有纠错功能。

        2、TCP/IP两个协议阶段

                TCP协议:用来检测网络传输中的差错的传输控制协议;

                IP协议:专门负责对不同的网络进行互联的互联网协议;

        3、网络体系结构和开放系统互联模型

                网络体系结构:分层而治之,层次之间相互协同,是网络的层次结构和每层所使用的协议的集合。

                开放系统互联模型(OSI):是一个理想化的模型,分为七层,从上到下依次是:物理层、数据链路层、网络层、传输层、会话层、表示层和应用层(物数网传会表应)。

         4、TCP/IP协议族体系结构

                TCP/IP协议族是可以应用的工业标准,分为四层,从上往下分别为:应用层,传输层,网络层和链路层。

TCP/IP与OSI模型对应关系:

 二、网络基础知识

1、字节序

        小端字节序(little-endian):低字节存储在地址低位、高字节存储在地址高位;

        大端字节序(big-endian):高字节存储在地址地位、低字节存储在地址高位;

        主机字节序:不同CPU的主机,可能是小端序,可能是大端序。

        网络字节序:规定为大端序,发送数据前,需要将主机字节序转为网络字节序,以保证发送和读取的数据一致。

2、如何判断自己的主机是大端存储还是小端存储

方法1:使用指针截取

#include <stdio.h>

int main(int argc, const char *argv[])
{
	int num = 0x12345678;
	char *p = (char *)&num;
	if(0x12 == *p){
		printf("大端\n");
	}else if(0x78 == *p){
		printf("小端\n");
	}
	return 0;
}

 方式2:使用共用体

#include <stdio.h>

union Test{
	int a;
	char b;
};

int main(int argc, const char *argv[])
{
	union Test t;
	t.a = 0x12345678;
	if(0x12 == t.b){
		printf("大端\n");
	}else if(0x78 == t.b){
		printf("小端\n");
	}

	return 0;
}

3、什么情况需要转换字节序,什么情况不需要

        需要转换:数据是多字节作为一个整体;

        不需要转换:已知传输数据的双方主机为相同的字节序,或者传输的字节序是字符串。

4、字节序转换的函数

        h是host,代表主机字节序,n为network,代表网络字节序

        l是long,代表4字节,s为short,代表2字节

#include <arpa/inet.h>
uint32_t htonl(uint32_t hostlong);	//主机转网络 4字节
uint16_t htons(uint16_t hostshort);	//主机转网络 2字节
uint32_t ntohl(uint32_t netlong);	//网络转主机 4字节
uint16_t ntohs(uint16_t netshort);	//网络转主机 2字节

5、socket函数

        socket函数可用于同主机的进程间通信;

        socket函数与TCP/IP协议族配合使用,可实现不同主机的进程间通信;

        socket是一个编程接口,是一种特殊的文件描述符,并不仅限于TCP/IP协议,还有UDP协议,它将复杂的网络通信过程封装成IO操作。

        套接字的分类:

                流式套接字(SOCK_STREAM)--TCP

                数据套接字(SOCK_DGRAM)--UDP

                原始套接字(SOCK_RAM)

6、IP地址

        IPV4  4字节  32bit  由网络号和主机号组成

        IPV6 16字节 128bit

        对于IPV4而言,IP地址的表示形式 "192.168.80.10" 这种叫做点分十进制,是一个字符串

计算机中存储IP地址是用的无符号4字节整型(unsign

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值