
网络编程
Jimmy1224
这个作者很懒,什么都没留下…
展开
-
DHCP协议介绍及启动过程讲解
DHCP协议介绍什么是DHCP?DHCP的功能DHCP(Dynamic Host Configuration Protocol):动态主机配置协议在常见的小型网络中(例如家庭网络和学生宿舍网),网络管理员都是采用手工分配IP地址的方法,而到了中、大型网络,这种方法就不太适用了。在中、大型网络,特别是大型网络中,往往有超过100台的客户机,手动分配IP地址的方法就不太合适了。因此,我们必须引...原创 2020-01-29 12:44:26 · 1962 阅读 · 0 评论 -
UDP解决丢包问题总结
收包率低/丢包率高的原因分析(1) 缓存太小,不能及时接收数据。连续多个UDP包超过了UDP接收缓冲区大小 ,比如:如:UDP包过大如:UDP发包速率过快,突发大数据流量超过了缓冲区上限(2)recvfrom()接收到数据之后处理速度太慢如果数据接收和处理是连续进行的,那么可能由于数据处理过慢,两次recvfrom调用的时间间隔里发过来的包丢失对应的解决方法UD...转载 2019-11-24 22:13:14 · 16459 阅读 · 0 评论 -
网络编程中数据无法达到问题总结
在项目中使用到了UDP网络编程知识点,在联调或者测试中遇到了多种数据无法按照预期到达的情况;这里不包括因API或者网络不通导致数据无法达到的情况,主要是因为用户配置或者系统环境导致。以下原因是项目中可能涉及的因素:系统防火墙原因,导致数据无法到达端口占用,导致数据被他程序接收客户端socket设置的服务器IP非预期地址客户端和服务端端口设置不一致解决方案总结如下:防火墙原因关...原创 2019-11-05 23:19:43 · 346 阅读 · 0 评论 -
HTTP报文结构概述
HTTP报文概述用于HTTP协议交互的信息称为HTTP报文,请求端的HTTP报文叫做请求报文,响应端的HTTP报文就做响应报文。 HTTP报文本身是由多行 (CR+LR\回车符+换行符)作为换行符)数据构成的字符串文本。HTTP报文大致分为报文首部和报文主体两块,报文首部和报文主体用空行(CR+LR)作为划分界限。以下这张图描述了请求和响应报文的结构。这个是截图百度首页的HTTP...原创 2018-07-22 21:58:53 · 690 阅读 · 0 评论 -
解密HTTP请求和响应过程
当我们在浏览器输入URL时,比如www.baidu.com时,这背后涉及的HTTP过程分析,下面给出两张图给与解释。第一张图表示HTTP请求所涉及的大致协议和流程图,HTTP响应过程也大致如此,只是没有再建立连接的过程,其他类似。 第二张图描述了客户端和服务端整体流程,包括建立连接和释放连接过程,HTTP请求和响应是以长连接、管线化的方式进行,提高整体通信和响应速度。...原创 2018-07-22 19:33:52 · 1057 阅读 · 0 评论 -
网络编程之UDP广播通信
广播通信像ARP地址解析协议和DHCP动态主机设置协议都会使用到UDP中的广播通信方式,这些客户端在启动时,会在第一时间以广播的形式向所在网络子网送报文。这里给出DHCP协议流程,用于辅助学习,其流程图如下:想要进行广播通信,必须知道广播地址才可以。在IP地址中,如果最后一位数组是255,则该地址一定是广播地址,形如192.168.0.255,常见的广播地址有以下两种:受限广播地址...原创 2019-06-30 17:03:22 · 3909 阅读 · 0 评论 -
setsockopt函数的作用和说明
setsockopt()函数用于任意类型、任意状态套接口的设置选项值,其作用和使用说明如下:int setsockopt(SOCKET s, int level, int optname, const char FAR *optval, int optlen);Parameters :s:标识一个套接口的描述字。level:被设置的选项的级别, 目前仅支持SOL_SOCKET...转载 2019-06-30 20:40:16 · 8326 阅读 · 0 评论 -
Windows下select模型服务端编程
select模型是一种比较常用的IO模型。利用该模型可以使Windows socket应用程序可以同时管理多个套接字。 使用select模型,可以使当执行操作的套接字满足可读可写条件时,给应用程序发送通知,收到这个通知后,应用程序再去调用相应的Windows socket API去执行函数调用。Select模型的核心是select函数。调用select函数检查当前各个套接字的状态。根据函数的返回...转载 2019-07-07 14:59:44 · 1817 阅读 · 0 评论 -
网络编程之UDP多播通信
UDP通信分类在基于UDP(面向无连接)的socket编程 这篇文章中,给出了UDP服务端和客户端编码流程。根据不同的场景需要,我们可以将UDP编程设置为三种通信模式,分别如下:单播广播组播(也叫多播)不同的通信模式是通过setsockopt系统接口来完成,默认是UDP是单播模式,组播和广播需要setsockopt来配合完成。以下是对三种通信方式概念说明单播,一对一的通信方式,...原创 2019-07-28 23:29:18 · 4969 阅读 · 0 评论 -
setsockopt设置多播属性失败的解决方法
问题背景项目中使用了多播技术实现消息传递,但在调试时却一直接收不到消息。后面通过调试发现,问题出现在服务端加入多播组setsockopt时失败返回-1,错误代码10042。加入多播组代码如下://加入多播组struct ip_mreq stMreq;//IP multicast address of groupstMreq.imr_multiaddr.s_addr = inet_add...原创 2019-08-18 16:48:42 · 4980 阅读 · 1 评论 -
因网络问题导致ADD_MEMBERSHIP失败的解决方法
问题背景项目中由于需要使用多播编程技术,在调试调试初期出现过服务端无法监听到客户端请求,因此写了setsockopt设置多播属性失败的解决方法这篇文章。在后续进一步测试过程中,还陆陆续续出现出现10065和10049的socket error,发生错误的代码均在socket设置多播组属性,代码如下://加入多播组struct ip_mreq stMreq;//IP multicast ad...原创 2019-08-23 23:15:53 · 2456 阅读 · 0 评论 -
INADDR_ANY和INADDR_BROADCAST的含义上说明
INADDR_ANY 、INADDR_LOOPBACK 、INADDR_BROADCAST这三个常量在文件中的定义如下:#define INADDR_ANY (u_long)0x00000000#define INADDR_LOOPBACK 0x7f000001#define INADDR_BROADCAST (u_long)0xfff...转载 2019-06-29 23:23:48 · 9722 阅读 · 2 评论 -
网络编程常用API使用说明
在网络编程过程中,网络环境复杂,为了代码健壮性,我们需要检查相关函数的返回值, 下面列出常见的网络编程API函数使用说明和返回值。通用部分WSAStartup函数int WSAStartup( WORD wVersionRequired, LPWSADATA lpWSAData);该函数主要用于window下网络编程的环境初始化,其主要功能如下:加载Winsock...原创 2019-07-07 22:31:35 · 590 阅读 · 0 评论 -
winsocket编程中出现10093错误的解决方法
在window编程中我们希望获取本地计算机的ip地址时,通常是通过gethostname以及gethostbyname两个API来实现。gethostname:得到本机主机名或者域名。有两个参数,一个是用来存放主机名或者域名的变量,一个是缓冲区的大小。gethostbyname:通过域名或者主机命返回IP地址,传进去的参数是一个域名或者主机名,返回值是一个hostent指针结构。如果我们没有...原创 2019-06-11 23:25:00 · 11485 阅读 · 0 评论 -
TCP三次握手和四次挥手原理分析
TCP/IP协议不是TCP和IP这两个协议的合称,而是指因特网整个TCP/IP协议族。从协议分层模型方面来讲,TCP/IP由四个层次组成:网络接口层、网络层、传输层、应用层。TCP协议:即传输控制协议,它提供的是一种可靠的数据流服务。当传送受差错干扰的数据,或举出网络故障,或网络负荷太重而使网际基本传输系统不能正常工作时,就需要通过其他的协议来保证通信的可靠。TCP就是这样的协议。转载 2017-03-05 10:59:10 · 1160 阅读 · 0 评论 -
sockaddr和sockaddr_in的区别
在socket编程中我们都会用到bind()函数和connect()函数,其第二个参数都是指向sockaddr类型的指针,其函数声明如下:int bind(SOCKET s, const struct sockaddr FAR* name, int namelen);参数: s 指定将要绑定的套接字。 name 指向s原创 2017-03-05 16:46:45 · 1005 阅读 · 0 评论 -
Socket编程总结
“一切皆Socket!”话虽些许夸张,但是事实也是,现在的网络编程几乎都是用的socket。——有感于实际编程和开源项目研究。我们深谙信息交流的价值,那网络中进程之间如何通信,如我们每天打开浏览器浏览网页时,浏览器的进程怎么与web服务器通信的?当你用QQ聊天时,QQ进程怎么与服务器或你好友所在的QQ进程通信?这些都得靠socket?那什么是socket?socket的类型转载 2017-02-26 22:29:48 · 814 阅读 · 2 评论 -
inet_addr 和inet_ntoa函数作用
我们使用socket进行通信的时候,我们需要指定三个元素:通信域(地址族)、IP地址、端口号,这三个元素由SOCKADDR_IN结构体定义,为了简化编程一般将IP地址设置为INADDR_ANY,如果需要使用特定的IP地址则需要使用inet_addr 和inet_ntoa完成字符串和in_addr结构体的互换,in_addr是SOCKADDR_IN成员,其代表IP地址。inet_add函数声明如原创 2017-03-05 18:44:41 · 52149 阅读 · 0 评论 -
网络编程基础知识点
首先先看一张计算机网络示意图,如下所示: 这两台计算机要完成一次通信需要具备三个元素,端口号,IP地址,通信协议,下面根据这三个元素展开。IP地址IP地址就是通常是点分十进制来表示,形式如“10.111.193.254”,它具有全球唯一性,表示通信身份地址。通信协议只有使用相同的规则,两个计算机才能完成网络间的通信,主要有两种协议:一个是国际标准组织定义的OSI七层模型,一个是TCP/IP模型原创 2017-03-10 22:15:30 · 1094 阅读 · 0 评论 -
基于UDP(面向无连接)的socket编程
说明:本程序是基于windows socket的套接字库实现网络编程; 当WSAStartup函数调用成功后,在程序的最后都需要相应的调用WSACleanup函数 以便释放为该应用程序分配的资源,终止对WinSock动态库的使用。基于UDP的服务器端流程创建套接字(socket)将套接字和IP地址、端口号绑定在一起(bind)等待客户端发起数据通信(recvfrom/recvto)关原创 2017-04-08 17:12:37 · 10309 阅读 · 3 评论 -
基于TCP(面向连接)的socket编程
说明:本程序是基于windows socket的套接字库实现网络编程; 当WSAStartup函数调用成功后,在程序的最后都需要相应的调用WSACleanup函数 以便释放为该应用程序分配的资源,终止对WinSock动态库的使用。基于TCP的服务器端流程创建套接字(socket);将socket绑定本地地址和端口号(bind);将 socket设置为监听模式,准备接收客户端请求(liste原创 2017-04-08 16:27:36 · 2200 阅读 · 0 评论 -
简析TCP的三次握手与四次分手
TCP是什么?具体的关于TCP是什么,我不打算详细的说了;当你看到这篇文章时,我想你也知道TCP的概念了,想要更深入的了解TCP的工作,我们就继续。它只是一个超级麻烦的协议,而它又是互联网的基础,也是每个程序员必备的基本功。首先来看看OSI的七层模型:我们需要知道TCP工作在网络OSI的七层模型中的第四层——Transport层,IP在第三层——Network层,ARP在第二层——Data转载 2017-03-05 11:01:55 · 757 阅读 · 0 评论 -
Base64编码及其作用
最重要的是1.便于网络传输。2.不可见性。(一)Encoding VS. Encryption很多人都以为编码(Encoding)和加密(Encryption)是同一个意思。编码和加密都是对格式的一种转换,但是它们是有区别的。编码是 公开的,比如下面要介绍的Base 64编码,任何人都可以解码;而加密则相反,你只希望自己或者特定的人才可以对内容进行解密。(二)Base 64编码...转载 2018-02-23 16:28:01 · 1614 阅读 · 0 评论 -
libcurl库(C++)快速使用
简介libcurl作为是一个多协议的便于客户端使用的URL传输库,基于C语言,提供C语言的API接口,支持DICT, FILE, FTP, FTPS, Gopher, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMTP, SMTPS, Telnet and TFTP这些协议,同时支持使用S...转载 2018-12-20 20:20:18 · 3064 阅读 · 0 评论 -
C++ 用libcurl库进行http通讯网络编程
LibCurl基本编程框架libcurl是一个跨平台的网络协议库,支持http, https, ftp, gopher, telnet, dict, file, 和ldap 协议。libcurl同样支持HTTPS证书授权,HTTP POST, HTTP PUT, FTP 上传, HTTP基本表单上传,代理,cookies,和用户认证。想要知道更多关于libcurl的介绍,可以到官网 http:/...转载 2019-03-23 13:59:00 · 642 阅读 · 0 评论 -
htons(), ntohl(), ntohs(),htons() 函数功能
在C/C++写网络程序的时候,需要使用网络字节顺序与本地字节顺序之间的转换函数,分别是如下:htonl()--"Host to Network Long"ntohl()--"Network to Host Long"htons()--"Host to Network Short"ntohs()--"Network to Host Short"之所以需要这些函数是因为计算机数据转载 2017-03-04 22:43:52 · 922 阅读 · 0 评论