网络编程
文章平均质量分 73
csdn_dzh
一些点滴的记录
展开
-
网络编程——5. 基于TCP的服务器端/客户端(2)
5.1 回声客户端的完美实现 前面提到,服务器希望通过调用1次write函数传输数据,但如果数据太大,操作系统可能把数据分成多个数据包发送到客户端 ,而之前的回声客户端是这么写的 你可以清楚的看到,客户端传输的是字符串,而且是通过write一次性发送的。之后还调用一次read,期待接收自己传输的字符串 而实际的情况是,在此过程中,客户端有可能在尚未接收到全部的数据包时就调用了read函数。 Q:...原创 2018-11-09 16:21:47 · 269 阅读 · 0 评论 -
网络编程——3. 地址族与数据序列
3.1 给套接字分配IP地址与端口号 IP(Internet Protocol)是指网络协议,是为收发网络数据而分配给计算机的值 端口号是为区分程序中创建的套接字而分配给套接字的序号 网络地址 IP地址分为两类: IPv4 IPv6 4字节地址族 6字节地址族 IPv4标准的4字节IP地址分为网络地址和主机地址,且分为A、B、C、D、E等类型。 网络ID是为了区分网...原创 2018-11-08 21:45:33 · 234 阅读 · 0 评论 -
网络编程——4. 基于TCP的服务器端/客户端(1)
4.1 理解TCP和UDP 根据数据传输方式的不同,基于网络协议的套接字分为TCP和UDP套接字 TCP(Transmission Control Protocol)传输控制协议 TCP/IP协议栈 开放式系统:以多个标准为依据设计的系统,TCP/IP协议栈也属于其中之一,开放式系统使协议设计更容易。 路由器用来完成IP层交互任务。比如某公司原来用A公司的路由器,想换成B公司的,也可以,而...原创 2018-11-08 23:08:05 · 309 阅读 · 0 评论 -
网络编程——11. 进程间通信
11.1 进程间通信的基本概念 进程间通信意味着两个不同进程间可以交换数据,为了完成这一点,操作系统中应提供两个进程可以同时访问的内存空间。 对进程间通信的基本理解 只要有两个进程可以同时访问的内存空间,就可以通过此空间交换数据。 但是,进程具有完全独立的内存结构。就连通过fork函数创建的子进程也不会与父进程共享内存空间。此时,进程间通信只能通过其他特殊方法完成。 通过管道实现进程间通信...原创 2018-11-12 09:07:56 · 267 阅读 · 0 评论 -
网络编程——15. 套接字和标准IO
15.1 标准IO函数的优点 1。 标准IO函数具有良好的移植性,这些函数都是按照ANSI C标准定义的 2。标准IO函数可以利用缓冲提高性能 创建套接字时操作系统会准备IO缓冲,此缓冲在执行TCP协议时发挥着重要的作用。 若使用标准IO函数,将得到额外的另一缓冲的支持 可以看到,使用标准IO函数传输数据时,经过两个缓冲。 例如通过fputs函数传输字符串“hello”,首先将数据传递到标准...原创 2018-11-14 10:05:54 · 440 阅读 · 0 评论 -
网络编程——12. IO复用
讨论并发服务器的第二种实现方法——基于IO复用的服务器端构建。 12.1 基于IO复用的服务器端 多进程服务器端的缺点和解决方法 为构建并发服务器,只要有客户端连接请求就会创建新进程。。 但并非十全十美,这需要大量的运算和内存空间,由于每个进程都具有独立的内存空间,所以相互间的数据交换也要求采用相对复杂的方法。 能不能不创建进程的同时向多个客户端提供服务呢 可以,就IO复用 复用技术在...原创 2018-11-12 15:05:57 · 171 阅读 · 0 评论 -
网络编程——16. 关于IO流分离的其他内容
流,指数据的流动。比如调用fopen函数打开文件后可以与文件交换数据,就说fopen函数调用后创建了“流” 16.1 分离IO流 2次IO流分离 第一种是TCP IO过程分离。它调用fork函数复制出1个文件描述符,以区分输入和输出中使用的文件描述符,分开了2个分拣描述符的用途。好处是: 通过分开输入过程和输出过程降低实现难度 与输入无关的输出操作可以提高速度 第二种是通过2次fdo...原创 2018-11-14 11:28:57 · 203 阅读 · 0 评论 -
网络编程——17. 优于select的epoll
select函数实现IO复用,但不适合以Web服务器端开发为主流的现代开发环境 17.1 epoll理解及其应用 基于select的IO复用技术速度慢的原因 不合理的两点: 1。调用select函数后常见的针对所有文件描述符的循环语句 2。每次调用select函数时都需要向该函数传递监视对象信息——致命弱点。 select函数的优点 有两点: 1。服务器端接入者少 2。程序应具有兼容性...原创 2018-11-14 15:33:00 · 164 阅读 · 0 评论 -
网络编程——18. 多线程服务器端的实现(1)
由于Web服务器端协议本身具有的特点,经常需要同时向多个客户端提供服务。因此,人们逐渐舍弃进程,转而开始利用更高效的线程实现Web服务器端 18.1 理解线程的概念 引入线程的背景 多进程模型与select或epoll相比的确有自身的优点,但同时也有问题: 1。创建进程的过程会带来一定的开销 2。为了完成进程间数据交换,需要特殊的IPC技术 3。经常发生“上下文切换”:运行程序前需要将相应进...原创 2018-11-14 21:24:50 · 598 阅读 · 0 评论 -
网络编程——18. 多线程服务器端的实现(2)
服务器端 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <signal.h> #include <sys/wait.h&am原创 2018-11-14 21:30:19 · 247 阅读 · 0 评论 -
网络编程——2. 套接字类型与协议设置
2.1 套接字协议及其数据传输特性 关于协议 协议就是为了完成数据交换而定好的约定。 创建套接字 #include <sys/socket.h> int socket(int domain, int type, int protocol); domain ——套接字中使用的协议族信息 type ——套接字数据传输类型信息 protocol——计算机间通信中使用的协...原创 2018-11-08 20:04:36 · 183 阅读 · 0 评论 -
网络编程——1. 理解网络编程和套接字
1.1 理解网络编程和套接字 网络编程和套接字概要 1)首先需要物理连接,如今大部分计算机都已经连接到互联网,因此不用担心这一点 2)数据传输软件。操作系统会提供名为“套接字”的部件,套接字是网络数据传输用的软件设备。 构建接电话套接字 1)安装电话机:调用socket函数创建套接字 #include &lt;sys/socket.h&gt; int socket(int domain, in...原创 2018-11-08 18:55:28 · 289 阅读 · 0 评论 -
网络编程——5. TCP原理
5.2 TCP原理 TCP套接字中的I/O缓冲 TCP套接字的数据收发无边界。服务器端即使调用1次write函数传输40字节的数据,客户端也有可能通过4次read函数调用每次读取10字节。 那么,在客户端接收10字节后,剩下的30字节在何处等候呢? 实际上, write调用后并非立即传输数据,而是将数据移至输出缓冲 read调用后也并非立即接收数据,而是从输入缓冲读取数据 也就是说,在调用...原创 2018-11-09 17:25:21 · 268 阅读 · 0 评论 -
网络编程——6. 基于UDP的服务器端/客户端
6.1 理解UDP UDP套接字的特点 跟寄信一样,我写好名字和地址,贴上邮票寄出去就好了。 邮寄过程的丢失或者损坏我都没办法保证,是一种不可靠的传输方式。但相比TCP,虽然可靠性差一些,但比TCP简洁一些,速度也更快一些(在每次交换的数据量越小的情况下)。。 TCP和UDP的差异只在于流控制机制:TCP在不可靠的IP层进行流控制,而UDP缺少这种流控制机制。 6.2 实现基于UDP的...原创 2018-11-09 21:29:27 · 357 阅读 · 0 评论 -
网络编程——7. 优雅地断开套接字连接
之前的方法不够优雅是因为,我们直接调用了close或closesocket函数单方面断开连接。 7.1 基于TCP的半关闭 TCP中的断开连接过程比建立连接过程更重要,因为连接过程一般不会出现变数,但断开过程有可能发生预想不到的结果。 单方面断开连接带来的问题 假如两台主机正在双向通信。当主机A发送完最后的数据后,调用close函数断开了连接,之后主机A再也无法接收主机B的传输数据。 断...原创 2018-11-09 21:57:54 · 339 阅读 · 0 评论 -
网络编程——8. 域名(Domain Name System)及网络地址
8.1 域名系统DNS DNS是对IP地址和域名进行相互转换的系统,其核心是DNS服务器。 什么是域名 提供网络服务的服务器端也是通过IP地址区分的。 但这么一来会以非常难记的IP地址形式交换服务器端地址信息。因此,将容易记、易描述的域名分配并取代IP地址。 DNS服务器 我们常输入网址而非IP地址,就像访问Naver网站, 输入www.naver.com和222.122.195.5...原创 2018-11-09 22:58:23 · 458 阅读 · 0 评论 -
网络编程——9. 套接字的多种可选项
9.1 套接字可选项和IO缓冲大小 套接字除了数据通信以外,还有其他不同的特性可以根据实际需要进行更改。 套接字多种可选项 1)套接字多种可选项 2)getsockopt &amp; setsockopt 比如想用SOL_SOCKET、名为SO_TYPE的可选项查看套接字类型 int tcp_sock = socket(PF_INET, SOCK_STREAM, 0); int sock...原创 2018-11-11 10:42:49 · 193 阅读 · 0 评论 -
网络编程——10. 多进程服务器端(1)
10.1 进程概念及其应用 可以构建按序向第一个客户端到第一百个客户端提供服务的服务器端。当然,第一个客户端不会去抱怨,但是如果每个客户端的服务时间都要0.5s,那第100个客户端就会疯狂抱怨了。 并发服务器端的实现方法 即使有可能延长服务时间,也有必要改进服务器端,使其同时向所有发起请求的客户端提供服务,以提高平均满意度。 向多个客户端提供服务是一种有效利用CPU的方式 接下来讨论...原创 2018-11-11 20:32:48 · 333 阅读 · 0 评论 -
网络编程——10. 多进程服务器端(2)
10.3信号处理 现在,已经知道了子进程如何创建和销毁。那么,有一个问题: 子进程究竟什么时候销毁?父进程往往很忙,因此不能只调用waitpid以等待子进程的终止呀。 向操作系统求助 子进程终止的识别主体是操作系统,若操作系统能告知父进程说它的子进程终止了。那么父进程就能放下暂时的工作,处理子进程终止的事情。 引入信号机制:在特定事件发生时由操作系统向进程发送的消息,另外,为了响应该消息...原创 2018-11-11 23:49:38 · 207 阅读 · 0 评论 -
网络编程——13. 多种IO函数
13.1 Linux中的send & recv send recv 这两个函数的最后一个参数是收发数据时的可选项。可以利用位或运算(|)同时传递多个信息。 MSG_OOB 用于发送“带外数据”紧急消息。优先处理。 发送例子 接收例子 编译并运行上面的send和recv(./send 127.0.0.1 9190 ./recv 9190) 结果...原创 2018-11-13 22:05:15 · 189 阅读 · 0 评论 -
网络编程——14. 多播与广播
假如要向1w名用户发送数据: 如果基于TCP提供服务,则需要维护1w个套接字连接 即使基于UDP提供服务,也需要1w次数据传输 像这样向大量客户端发送相同数据时,也会对服务器端和网络流量产生负面影响。 14.1 多播 多播方式的数据传输是基于UDP完成的,可以向多个主机传递数据 多播的数据传输方式及流量方面的优点 特点如下: 多播服务器端针对特定多播组,只发送1次数据 即使只发送1次数...原创 2018-11-13 22:55:53 · 339 阅读 · 0 评论 -
网络编程——19. 制作HTTP服务器端
19.1 HTTP概要 HTTP(Hypertext Transfer Protocol,超文本传输协议)服务器端,即Web服务器端 理解Web服务器端 基于HTTP协议,将网页对应文件传输给客户端的服务器端 Hypertext(超文本传输协议)是可以根据客户端请求而跳转的结构化信息 例如通过浏览器访问某主页时,首页文件将传输到浏览器并展现给大家,点击鼠标跳转到任意页面。这种可跳转的文本称为...原创 2018-11-14 22:33:47 · 492 阅读 · 0 评论