![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
TCP/IP网络编程(尹圣雨)学习笔记
文章平均质量分 77
涵盖操作系统、TCP/IP协议、展现在Windows,Linux平台下的共性和区别,条件触发,边缘触发
explore翔
安徽某985小硕,记录日常学习生活,欢迎大家交流指教。
展开
-
回声服务器端和客户端的Windows实现
我们经过之前的实践已经知道,通信过程是怎样的。其中我的代码实践收获是对listen,accept函数作用有了更深的了解。在listen函数之前,我们的sockser服务器端套接字是不能被连接的。只有调用listen(sockser,backlog)才可以被连接。这相当于一个门卫的作用,每次客户端的请求都要经过这个门卫处理,将请求置入等候室。那么,执行的功能就是accept函数了,它的返回值是一个用于数据I/O的套接字,相当于给我们办事的工作人员,我们的read,write函数中传入的第一个参数就是这个套接原创 2021-04-03 22:40:32 · 441 阅读 · 0 评论 -
入门级socket--服务端和客户端通信
学完TCP/IP编程理论知识后,我们开始在Windows下对其中的代码进行一些实践。本篇就是最基础的部分,讲的是TCP协议下的服务器端和客户端利用socket通信。准备工作Windows与Linux上的套接字一个区别是:Windows上需要先对Winsock库进行初始化,最后退出还要注销Winsock相关库。int WSAStartup(WORD wVersionRequested, LPWSADATA lpWSAData);第一个参数:Winsock中存在多个版本,应准备WORD类型的(WOR原创 2021-04-02 20:28:49 · 379 阅读 · 0 评论 -
I/O复用
本章将讨论并发服务器的第二种实现方法——基于I/O复用(Multiplexing)的服务器端构建。虽然通过本章多学习一种服务器端实现方法非常重要,但更重要的是理解每种技术的优缺点。如果能掌握每种技术的优劣,就可以根据特定目标灵活应用不同模型,而不是仅关注功能实现。多进程服务器端的缺点和解决方法为了构建并发服务器,只要有客户端连接请求就会创建新进程。这的确是实际操作中采用的一种方案,但并非十全十美,因为创建进程时需要付出极大代价。这需要大量的运算和内存空间,由于每个进程都具有独立的内存空间,所以相互间的数原创 2021-03-21 22:03:12 · 172 阅读 · 0 评论 -
进程间通信
之前讲解了如何创建进程,本章将讨论创建的2个进程之间交换数据的方法。这与构建服务器端无直接关系,但可能有助于构建多种类型服务器端,以及更好地理解操作系统。11.1 进程间通信的基本概念进程间通信(Inter Process Communication)意味着两个不同进程间可以交换数据,为了完成这一点,操作系统应提供两个进程可以同时访问的内存空间。对进程间通信的基本理解理解进程间通信并没有想象中那么难,进程A和B之间的如下谈话内容就是一种进程间通信规则。“如果我有1个面包,变量bread的值就变为1原创 2021-03-19 16:07:32 · 168 阅读 · 0 评论 -
多进程服务器端
之前打下了理论基础,现在才是开始学习构建实际服务器的知识。0.1 进程概念及应用利用之前学习到的内容,我们可以构建按序向第一个客户端到第一百个客户端提供服务的服务器端。当然,第一个客户端不会抱怨服务器端,但如果每个客户端的平均服务时间为0.5秒,则第100个客户端会对服务器端产生相当大的不满。并发服务器端的实现方法即使有可能延长服务时间,也有必要改进服务器端,使其同时向所有发起请求的客户端提供服务,以提高平均满意度。而且网络程序中数据通信时间比CPU运算时间占比更大,因此,向多个客户端提供服务是一种原创 2021-03-16 20:00:40 · 511 阅读 · 0 评论 -
套接字的多种可选项
套接字具有多种特性,这些特性可通过可选项更改。本章将介绍更改套接字可选项的方法,并以此为基础进一步观擦套接字内部。我们之前写的程序都是创建好套接字后(未经特别操作)直接使用,此时通过默认的套接字特征进行数据通信。之前的示例较为简单,无需特别操作套接字特性,但有时的确需要更改。从表中可以看出,套接字可选项是分层的。IPPROTO_IP层可选项是IP协议相关事项,IPPROTO_TCP层可选项是TCP协议相关的事项,SOL_SOCKET层套接字相关的通用可选项。也许有人看到表格会产生畏惧感,但现在无需全原创 2021-03-12 16:04:42 · 137 阅读 · 0 评论 -
域名与网络地址
1、域名系统DNS是对IP地址和域进行相互转换的系统,其核心是DNS服务器。什么是域名提供网络服务的服务器端也是通过IP地址区分的,但几乎不可能以非常难记 的IP地址形式交换服务器端地址信息。因此,将容易记、易表述的域名分配并取代地址。DNS服务器在浏览器地址栏中输入Naver网站的IP地址222.122.195.5即可浏览Naver网站主页。但我们通常输入Naver网站的域名www.naver.com访问网站。二者之间究竟有何区别?从进入Naver网站主页这一结果看,没有区别,但接入过程不同。原创 2021-03-09 13:33:01 · 578 阅读 · 0 评论 -
优雅地断开套接字连接-----半关闭
之前用的方法不够优雅是因为,我们是调用close或closesocket函数单方面断开连接的。TCP中断开连接过程 比建立连接过程更重要,因为连接过程中一般不会出现大的边数,但断开过程有可能发生预想不到的情况,因此应准确掌控。只有掌握了下面要讲解的半关闭(Half-close),才能明确断开过程。为了解决这类问题,“只关闭一部分数据交换中使用的流”(Half-close)的方法应运而生。断开一部分连接是指,可以传输数据但无法接收,或可以接收数据但无法传输。顾名思义就是只关闭流的一半。一旦两台主机间建立了原创 2021-03-07 20:02:44 · 256 阅读 · 0 评论 -
基于UDP的服务器端和客户端
前面我们想过了TCP方式的,现在我们说下UDP套接字的方式,内容较少,但是很实用。下面通过信件说明UDP的工作原理,这是讲解UDP时使用的传统示例,它与UDP特性完全相符。寄信前应先在信封上填好寄信人和收信人的地址,之后贴上邮票放进邮筒即可。当然,信件的特点使我们无法确认对方是否收到。另外,邮寄过程中也可能发生信件丢失的情况。也就是说,信件是一种不可靠的传输方式。与之类似,UDP提供的同样是不可靠的数据传输服务。如果只考虑可靠性,TCP的确比UDP好。但UDP在结构上比TCP更简洁。UDP不会发送类似A原创 2021-03-06 17:18:22 · 835 阅读 · 0 评论 -
基于TCP的服务器端/客户端(2)
前一篇从编程角度说明了基于TCP的服务器端/客户端,这一篇主要详细描述TCP的必要理论知识和如何解决上一篇遗留的问题。原创 2021-03-05 21:15:17 · 157 阅读 · 0 评论 -
基于TCP的服务器端和客户端
在之前我们已经学过了如何创建套接字和分配地址端口,接下来我们主要说说如何收发数据,这一篇主要讲面向连接的传输方式。1、理解TCP/UDPTCP是Transmission Control Protocol(传输控制协议)的简写,意为“对数据传输过程的控制”可以看出,TCP/IP协议栈又分为四层,分层可以将大问题化解成小问题;当然更重要的原因是,通过标准化设计开放式系统,在技术日益发展的今天,所有人遵循一种标准,才能持久发展。编程中面向对象的方法也是标准化思想的体现。链路层负责硬件标准,ip层负责路原创 2021-02-25 11:17:17 · 781 阅读 · 0 评论 -
地址族和数据序列
上一篇讲到了创建socket函数,也就是购买安装电话机,接下来还要分配电话号码,也就是如何给套接字分配ip地址和端口号。这也是基础内容。ipv4地址有4个字节,32比特,分为网络地址和主机地址,知道ip地址就知道数据要传到哪台计算机中,而这还不够,我们需要知到具体应用程序的地址,也就是端口号,实现端到端传输。1、地址信息的表示表示IPV4地址的结构体如下,这个结构体作为地址信息传给bind函数:struct sockaddr_in{sa_family_t sin_family;//地址族(原创 2021-02-24 21:00:49 · 204 阅读 · 0 评论 -
套接字类型与协议设置
本次学习主要了解socket函数的创建以及不同套接字的特性,只涉及到socket函数,所以大家不用觉得困难,但是会有些枯燥,这是后面实际网络编程的基础,需要好好掌握。看一下socket函数:#include<sys/socket.h>int socket(int domain,int type,int protocol);第一个参数是套接字使用的协议族信息,第二个是套接字数据传输类型信息,第三个是计算机通信中用的协议信息(套接字实际采用的最终协议信息),第一个参数一般是IPV4协议族(P原创 2021-02-24 19:28:13 · 175 阅读 · 0 评论 -
网络编程和套接字
1、什么是网络编程?就是编写程序使两台联网的计算机能够相互交换数据,这就是全部的意义,看起来很简单。完成这些需要电缆等硬件的支持,而操作系统提供的套接字就是需要的软件设备,完成数据传输。2、基本过程我们可以把套接字看成固定电话机,一个用的是互联网,一个是电话网,套接字和电话机一样,大致分成两种,即接听和拨打。我们先来看用于接听的套接字创建过程。(服务器端)(1)、socket函数创建套接字,(相当于购买一个电话机)#include<sys/socket.h>int socket(in原创 2021-02-24 13:47:22 · 169 阅读 · 0 评论