07 2017 档案
摘要:什么是启动代码? 启动代码是系统上电或者复位后运行的第一段代码,是进入C 语言的main 函数之前需要执行的那段汇编代码。STM32的启动代码在startup_stm32f10x_hd.s 启动代码有何用? 它的作用是在用户程序运行之前对系统硬件及软件环境进行必要的初始化并在最后使程序跳转到用户程序
阅读全文
摘要:1、正常情况下,调用close(),产生的其中一个效果就是发送FIN,只有双方都调用close(),才会出现正常的四次挥手。 2、如果是服务器,发起四次挥手是在关闭accept()返回的套接字,而不是socket()返回的套接字 3、Initiator=client,Receiver=server
阅读全文
摘要:产生RST的几个原因 1、请求超时 有89、27两台主机。主机89向主机27发送了一个SYN,表示希望连接8888端口,主机27回应了主机89一个SYN表示可以连接。但是主机89莫名其妙的发送了一个RST表示我不想连接你了。经过排查发现,在主机89上的程序在建立了socket之后,用setsocko
阅读全文
摘要:在服务器端,socket()返回的套接字用于监听(listen)和接受(accept)客户端的连接请求。这个套接字不能用于与客户端之间发送和接收数据。 accept()接受一个客户端的连接请求,并返回一个新的套接字。所谓“新的”就是说这个套接字与socket()返回的用于监听和接受客户端的连接请求的
阅读全文
摘要:MAC地址组成 网络设备的MAC地址是全球唯一的。MAC地址长度为48比特,通常用十六进制表示。MAC地址包含两部分:前24比特是组织唯一标识符(OUI,OrganizationallyUniqueIdentifier),由IEEE统一分配给设备制造商。 例如,华为的网络产品的MAC地址前24比特是
阅读全文
摘要:简介 OSI 是理论上的模型,也就是一个统一的国际标准,现在的很多网络设备或者是网络协议都不同程度的精简了自己的所谓的模型,那么他们为了自己的通讯兼容都会参考这个OSI模型 TCP/IP 包括: TCP/IP 模型就是现在的很多厂商统一参考的一个很工业化的模型!多数厂在不做特殊设备的情况下都会按照这
阅读全文
摘要:在服务器端打开keepalive功能 1、保证LWIP_TCP_KEEPALIVE被定义为1,(这样TCP_KEEPIDLE、TCP_KEEPINTVL和TCP_KEEPCNT 设置才有效) 2、 int32 keepalive = 1; int32 keepidle = 1; int32 keep
阅读全文
摘要:TCP_NODELAY是用来 禁用 Nagle’s Algorithm Nagle’s Algorithm 是为了提高带宽利用率设计的算法,其做法是合并小的TCP 包为一个,避免了过多的小报文的 TCP 头所浪费的带宽。如果开启了这个算法 (默认),则协议栈会累积数据直到以下两个条件之一满足的时候才
阅读全文
摘要:1、使用raw/callback API编程,用户编程的方法是向内核注册各种自定义的回调函数,回调函数是与内核实现交换的唯一方式。 recv_udp, accept_function, sent_tcp, recv_tcp, do_connected, poll_tcp, err_tcp! 2、协议
阅读全文
摘要:lwIP RAW TCP/IP接口 作者: Adam Dunkels, Leon Woestenberg, Christiaan Simons lwIP为使用TCP/IP协议通信的应用程序编程提供了两种接口接口(APIs): * 低层次的称之为"core" / "callback" 或者 "raw"
阅读全文
摘要:伯克利套接字(Berkeley sockets),也称为BSD Socket。伯克利套接字的应用编程接口(API)是采用C语言的进程间通信的库,经常用在计算机网络间的通信。 BSD Socket的应用编程接口已经是网络套接字的抽象标准。大多数其他程序语言使用一种相似的编程接口。它最初是由加州伯克利大
阅读全文
摘要:如何去配置lwip,使它去适合不同大小的脚,这就是lwIP的配置问题。尤其是内存的配置,配置多了浪费,配置少了跑不了或者不稳定(会出现的一大堆莫名奇妙的问题,什么打开网页的速度很慢啊?什么丢包啊,什么死机啦,什么跑到无限循环里边去了,总之很多)。 这两个配置lwip协议栈文件opt.h和lwipop
阅读全文
摘要:lwip的内存管理机制,我们以enet_lwip这个例程为例。 在使用lwip的时候,我们可以使用两种形式的内存,一种是heap(mem.c文件-mem_malloc()),一种是pool(memp.c文件-memp_malloc())。heap就像是一整块蛋糕,我们需要多少就切多少,但是切了之后不
阅读全文
摘要:1、要节省ram资源,可以使用malloc()动态申请内存,使用完再用free()释放掉,free()释放的是指针指向的内存空间,而不是指针。 2、如果某个大数组要在两个函数中使用,可以先定义一个全局指针,在函数中申请和释放内存,这样只需要长期耗用一个指针所占用的内存,而能在两个函数中都使用这个大数
阅读全文
摘要:sprintf() 函数原型:int sprintf( char *buffer, const char *format [, argument] ... ) 功能介绍: 1、把一个字符串赋值(拷贝)给另一个字符串,如: sprintf(str1, str2);//把字符串str2拷贝给str1 2
阅读全文
摘要:服务器端: 服务器端先创建一个socket,然后把这个socket绑定到端口上,接着让它向tcp/ip协议栈请求一个监听服务并创建一个accept队列来接受客户端请求。 客户端:
阅读全文
摘要:TCP 是面向连接的 , 在实际应用中通常都需要检测对端是否还处于连接中。如果已断开连接,主要分为以下几种情况: 1. 连接的对端正常关闭,即使用 closesocket 关闭连接。 2. 连接的对端非正常关闭,包括对端异常关闭,网络断开等情况。 对于第一种情况,对端正常关闭前都会告知对方,所以很好
阅读全文