![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
socket编程
RayCongLiang
广东海洋大学16级物联网学生
展开
-
【Linux学习笔记50】socket编程之TCP协议
socketsocket的意思是插座,插口的意思。那么在网络编程上,也顾名思义:两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。建立网络通信连接至少要一对端口号(socket)。socket也为TCP/IP等协议提供了开发的接口。网络编程的流程:OSI模型与TCP/IP协议的对应关系如图所示socket在上面的关系中充当接口(蓝色)socket提供...原创 2019-09-14 23:29:24 · 206 阅读 · 0 评论 -
【Linux学习笔61】广播与组播
引言广播与组播,顾名思义就是一对多进行通信的关系。那么很容易理解就是,TCP是点对点的单播通信,只有UDP中才存在广播与组播。广播同时将数据发给局域网中的所有主机,称之为广播。广播地址:以192.168.1.0(255.255.255.0)为例子,最大的主机地址为:192.168.1.255代表该网段的广播地址。因此我们能只需要发到该地址的数据包就可以让整个局域网的主机都接收。255...原创 2019-09-25 16:27:36 · 463 阅读 · 0 评论 -
【Linux学习笔记60】网络的带外数据(紧急数据)
引言只有TCP才有带外数据,UDP是没有的。网上也有一种说法,TCP没有真正意义上的“带外数据”。这种说法的由来是在TCP协议中,服务端与客户端之间都通过管道传输数据,比如传输的数据是1字节,没有超过socket中设置的缓冲池的限制的话,这个数据是要等到数据达到缓冲区上限才可以到达对端的。而“带外数据”也并没有什么捷径,也是一样通过这种方法到达对端,只不过会将其标志为紧急数据,提前让对端释放...原创 2019-09-25 15:49:41 · 366 阅读 · 0 评论 -
【Linux学习笔记59】超时控制的四种方法
引言在网络的配置中,有两个概念分别为:阻塞,非阻塞。阻塞情况下,当读一个socket套接字,即使没有数据也会一直等待。而非阻塞情况下,当读一个socket套接字,只会检测一瞬间,如果没有数据就离开,有数据则读出。这两种都是比较极端的方法,因此就有一个中间状态:超时控制。超时控制会是比较常用介于阻塞与非阻塞的一种方法,既不是无限等待数据的到来,也不是只等待一瞬间,可以设置为5分钟或者10分钟都可...原创 2019-09-24 20:46:23 · 624 阅读 · 0 评论 -
【Linux学习笔记58】套接字的属性
引言套接字与文件描述符一样,都拥有很多特性,那么本篇笔记主要记录一些套接字的属性以及设置。套接字的属性名称属性SO_BROADCAST允许发送广播数据SO_DEBUG允许调试SO_DONTROUTE不查找路由SO_ERROR获得套接字错误SO_KEEPALIVE保持连接SO_LINGER延迟关闭连接SO_OOBINLINE...原创 2019-09-24 13:55:49 · 985 阅读 · 0 评论 -
【Linux学习笔记57】TCP服务器IO模型之多路复用(二)SELECT函数
引言接着上一篇笔记的POLL函数实现TCP服务器的多路复用,本篇笔记主要是以SELECT函数实现服务器的多路复用。实现思路socket中有四个描述符,本质上都是阻塞,并且阻塞在一个端点上因此,使用文件描述符集合fd_set将关心的描述符放入集合中然后通过使用Select函数监听这个集合中的描述符Select函数会不断的变化,因此当有连接来访问以及数据同时访问的时候,listenfd...原创 2019-09-20 17:18:17 · 335 阅读 · 0 评论 -
【Linux学习笔记56】TCP服务器IO模型之多路复用(一)POLL函数
引言上一篇笔记介绍了多种TCP服务器处理多套接字的方法,本篇笔记主要内容是记录实现TCP服务器多路复用的POLL函数的使用方法。实现思想poll函数的原理假设服务器中有三个不同的套接字负责不同的任务为每个套接字建立独有的pollfd结构体并且在结构体中拥有events存放结构体负责的事件:读事件,写事件,报错事件等将以上的所有结构体组成一个结构体数组作为poll函数的参数以供使用...原创 2019-09-20 14:35:17 · 527 阅读 · 0 评论 -
【Linux学习笔记55】TCP服务器IO模型之非阻塞轮询
引言之前都介绍了多线程,多进程的方式解决各种TCP服务器的问题。那么本篇笔记主要记录单进程非阻塞的方式处理TCP服务器的服务。使用的方法就是轮询的机制处理,虽然这种方法很少使用,因为其占用的CPU资源很多,但是还是很有必要了解一下。各种模型的理解图第一种是前面笔记的多线程TCP服务端之简易QQ/多进程处理TCP服务器IO模型之并发阻塞处理多任务的方式第二种是本篇笔记的主要内容,单进程要...原创 2019-09-18 21:14:52 · 501 阅读 · 4 评论 -
【Linux学习笔记54】多进程处理TCP服务器IO模型之并发阻塞
引言这一篇笔记主要记录在TCP服务器中,如果连接端点都是阻塞的,我们应该如何处理。TCP是面向连接的,在服务端中,需要先进行连接,再通信。因此就存在一个监听套接字,专门监听对端的连接请求。那么,当存在多个对端的连接请求的时候,当达到服务器的连接上限后,如果服务器要读其中一个端的数据的时候,就不能做其他事情,只有当一件事完成后才能做下一件事,也就是存在阻塞。为了解决这个问题,我们可以使用多进程来...原创 2019-09-18 00:26:47 · 316 阅读 · 2 评论 -
【Linux学习笔记53】UDP服务器IO模型之信号驱动
引言上一篇笔记简单介绍了UDP协议的用法,这篇笔记主要是使用信号驱动的方式获得IO的数据。那么,这种方式只使用于UDP,==并不适用于TCP。==因为,TCP需要建立连接,每产生一个事件都会触发信号,比如说连接,连接确认,数据确认,断开连接等事件,都会触发信号。因此,TCP对应的事件过多,需要大部分精力解释信号。UDP异步信号的工作方式在应用层中会创建UDP的套接字,并且使用该套接字与硬...原创 2019-09-17 20:59:56 · 491 阅读 · 0 评论 -
【Linux学习笔记52】socket编程之UDP协议
引言TCP是一种有连接的网络协议,UDP是一种无连接的通信网络协议。两者相比之下,UDP会显得简单些。本篇笔记主要记录UDP协议的实现。实现思路服务器创建套接字服务器套接字绑定ip地址以及端口号与TCP连接不同的是,UDP使用recvfrom()函数来等待接收数据,而不能使用TCP中的read()函数。因为read只有数据,没有地址。UDP每次连接都需要有地址,因此使用recvfro...原创 2019-09-17 14:59:09 · 272 阅读 · 1 评论 -
【Linux学习笔记51】多线程TCP服务端之简易QQ
引言本篇笔记主要记录使用多线程的方式来实现,多个客户端之间进行通信,由服务器将信息进行转发。运行原理使用链表管理客户端主线程主要负责等待连接,当有客户端1连接,在链表创建新的节点,并且创建新的线程s1负责与客户端进行通信。客户端2连接时,也会创建对应的线程负责。s1子线程等待客户端发送数据客户端1中的s3负责等待键盘键入的数据,然后线程s2负责将键入的数据发送到服务器中服务器s1...原创 2019-09-15 23:49:18 · 241 阅读 · 0 评论 -
【Linux学习笔记62】UNIX域套接字
引言在之前的笔记写的socket笔记,是通信方式中的一种扩展,前面笔记的socket都使用地址IP实现通信。实际上,socket可以使用在不需要IP的场合,即本地通信。(与进程间的通信(一)(匿名管道与有名管道)一样)UNIX域套接字相比于前面的管道等提供的信息更多,比如:UNIX域可以等待对端的连接(与TCP类似),又可以实现帧同步(UDP类似)本地域套接字的使用字节流本地域套接字(不提...原创 2019-09-25 17:00:55 · 291 阅读 · 0 评论