网络编程
文章平均质量分 73
csdn_dzh
一些点滴的记录
展开
-
网络编程——5. 基于TCP的服务器端/客户端(2)
5.1 回声客户端的完美实现前面提到,服务器希望通过调用1次write函数传输数据,但如果数据太大,操作系统可能把数据分成多个数据包发送到客户端 ,而之前的回声客户端是这么写的你可以清楚的看到,客户端传输的是字符串,而且是通过write一次性发送的。之后还调用一次read,期待接收自己传输的字符串而实际的情况是,在此过程中,客户端有可能在尚未接收到全部的数据包时就调用了read函数。Q:...原创 2018-11-09 16:21:47 · 277 阅读 · 0 评论 -
网络编程——3. 地址族与数据序列
3.1 给套接字分配IP地址与端口号IP(Internet Protocol)是指网络协议,是为收发网络数据而分配给计算机的值端口号是为区分程序中创建的套接字而分配给套接字的序号网络地址IP地址分为两类:IPv4IPv64字节地址族6字节地址族IPv4标准的4字节IP地址分为网络地址和主机地址,且分为A、B、C、D、E等类型。网络ID是为了区分网...原创 2018-11-08 21:45:33 · 248 阅读 · 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 · 327 阅读 · 0 评论 -
网络编程——11. 进程间通信
11.1 进程间通信的基本概念进程间通信意味着两个不同进程间可以交换数据,为了完成这一点,操作系统中应提供两个进程可以同时访问的内存空间。对进程间通信的基本理解只要有两个进程可以同时访问的内存空间,就可以通过此空间交换数据。但是,进程具有完全独立的内存结构。就连通过fork函数创建的子进程也不会与父进程共享内存空间。此时,进程间通信只能通过其他特殊方法完成。通过管道实现进程间通信...原创 2018-11-12 09:07:56 · 281 阅读 · 0 评论 -
网络编程——15. 套接字和标准IO
15.1 标准IO函数的优点1。 标准IO函数具有良好的移植性,这些函数都是按照ANSI C标准定义的2。标准IO函数可以利用缓冲提高性能创建套接字时操作系统会准备IO缓冲,此缓冲在执行TCP协议时发挥着重要的作用。若使用标准IO函数,将得到额外的另一缓冲的支持可以看到,使用标准IO函数传输数据时,经过两个缓冲。例如通过fputs函数传输字符串“hello”,首先将数据传递到标准...原创 2018-11-14 10:05:54 · 457 阅读 · 0 评论 -
网络编程——12. IO复用
讨论并发服务器的第二种实现方法——基于IO复用的服务器端构建。12.1 基于IO复用的服务器端多进程服务器端的缺点和解决方法为构建并发服务器,只要有客户端连接请求就会创建新进程。。但并非十全十美,这需要大量的运算和内存空间,由于每个进程都具有独立的内存空间,所以相互间的数据交换也要求采用相对复杂的方法。能不能不创建进程的同时向多个客户端提供服务呢可以,就IO复用复用技术在...原创 2018-11-12 15:05:57 · 184 阅读 · 0 评论 -
网络编程——16. 关于IO流分离的其他内容
流,指数据的流动。比如调用fopen函数打开文件后可以与文件交换数据,就说fopen函数调用后创建了“流”16.1 分离IO流2次IO流分离第一种是TCP IO过程分离。它调用fork函数复制出1个文件描述符,以区分输入和输出中使用的文件描述符,分开了2个分拣描述符的用途。好处是:通过分开输入过程和输出过程降低实现难度与输入无关的输出操作可以提高速度第二种是通过2次fdo...原创 2018-11-14 11:28:57 · 221 阅读 · 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 · 176 阅读 · 0 评论 -
网络编程——18. 多线程服务器端的实现(1)
由于Web服务器端协议本身具有的特点,经常需要同时向多个客户端提供服务。因此,人们逐渐舍弃进程,转而开始利用更高效的线程实现Web服务器端18.1 理解线程的概念引入线程的背景多进程模型与select或epoll相比的确有自身的优点,但同时也有问题:1。创建进程的过程会带来一定的开销2。为了完成进程间数据交换,需要特殊的IPC技术3。经常发生“上下文切换”:运行程序前需要将相应进...原创 2018-11-14 21:24:50 · 617 阅读 · 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 · 263 阅读 · 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 · 190 阅读 · 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 · 301 阅读 · 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 · 276 阅读 · 0 评论 -
网络编程——6. 基于UDP的服务器端/客户端
6.1 理解UDPUDP套接字的特点跟寄信一样,我写好名字和地址,贴上邮票寄出去就好了。邮寄过程的丢失或者损坏我都没办法保证,是一种不可靠的传输方式。但相比TCP,虽然可靠性差一些,但比TCP简洁一些,速度也更快一些(在每次交换的数据量越小的情况下)。。TCP和UDP的差异只在于流控制机制:TCP在不可靠的IP层进行流控制,而UDP缺少这种流控制机制。6.2 实现基于UDP的...原创 2018-11-09 21:29:27 · 379 阅读 · 0 评论 -
网络编程——7. 优雅地断开套接字连接
之前的方法不够优雅是因为,我们直接调用了close或closesocket函数单方面断开连接。7.1 基于TCP的半关闭TCP中的断开连接过程比建立连接过程更重要,因为连接过程一般不会出现变数,但断开过程有可能发生预想不到的结果。单方面断开连接带来的问题假如两台主机正在双向通信。当主机A发送完最后的数据后,调用close函数断开了连接,之后主机A再也无法接收主机B的传输数据。断...原创 2018-11-09 21:57:54 · 362 阅读 · 0 评论 -
网络编程——8. 域名(Domain Name System)及网络地址
8.1 域名系统DNSDNS是对IP地址和域名进行相互转换的系统,其核心是DNS服务器。什么是域名提供网络服务的服务器端也是通过IP地址区分的。但这么一来会以非常难记的IP地址形式交换服务器端地址信息。因此,将容易记、易描述的域名分配并取代IP地址。DNS服务器我们常输入网址而非IP地址,就像访问Naver网站,输入www.naver.com和222.122.195.5...原创 2018-11-09 22:58:23 · 478 阅读 · 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 · 209 阅读 · 0 评论 -
网络编程——10. 多进程服务器端(1)
10.1 进程概念及其应用可以构建按序向第一个客户端到第一百个客户端提供服务的服务器端。当然,第一个客户端不会去抱怨,但是如果每个客户端的服务时间都要0.5s,那第100个客户端就会疯狂抱怨了。并发服务器端的实现方法即使有可能延长服务时间,也有必要改进服务器端,使其同时向所有发起请求的客户端提供服务,以提高平均满意度。向多个客户端提供服务是一种有效利用CPU的方式接下来讨论...原创 2018-11-11 20:32:48 · 349 阅读 · 0 评论 -
网络编程——10. 多进程服务器端(2)
10.3信号处理现在,已经知道了子进程如何创建和销毁。那么,有一个问题:子进程究竟什么时候销毁?父进程往往很忙,因此不能只调用waitpid以等待子进程的终止呀。向操作系统求助子进程终止的识别主体是操作系统,若操作系统能告知父进程说它的子进程终止了。那么父进程就能放下暂时的工作,处理子进程终止的事情。引入信号机制:在特定事件发生时由操作系统向进程发送的消息,另外,为了响应该消息...原创 2018-11-11 23:49:38 · 220 阅读 · 0 评论 -
网络编程——13. 多种IO函数
13.1 Linux中的send & recvsendrecv这两个函数的最后一个参数是收发数据时的可选项。可以利用位或运算(|)同时传递多个信息。MSG_OOB用于发送“带外数据”紧急消息。优先处理。发送例子接收例子编译并运行上面的send和recv(./send 127.0.0.1 9190 ./recv 9190)结果...原创 2018-11-13 22:05:15 · 205 阅读 · 0 评论 -
网络编程——14. 多播与广播
假如要向1w名用户发送数据:如果基于TCP提供服务,则需要维护1w个套接字连接即使基于UDP提供服务,也需要1w次数据传输像这样向大量客户端发送相同数据时,也会对服务器端和网络流量产生负面影响。14.1 多播多播方式的数据传输是基于UDP完成的,可以向多个主机传递数据多播的数据传输方式及流量方面的优点特点如下:多播服务器端针对特定多播组,只发送1次数据即使只发送1次数...原创 2018-11-13 22:55:53 · 351 阅读 · 0 评论 -
网络编程——19. 制作HTTP服务器端
19.1 HTTP概要HTTP(Hypertext Transfer Protocol,超文本传输协议)服务器端,即Web服务器端理解Web服务器端基于HTTP协议,将网页对应文件传输给客户端的服务器端Hypertext(超文本传输协议)是可以根据客户端请求而跳转的结构化信息例如通过浏览器访问某主页时,首页文件将传输到浏览器并展现给大家,点击鼠标跳转到任意页面。这种可跳转的文本称为...原创 2018-11-14 22:33:47 · 510 阅读 · 0 评论