
网络编程
网络编程基础详解,Linux网络编程,Windows网络编程。
超級码力
Keep Reading , Keep Writing , Keep Coding.
展开
-
制作HTTP服务器端
HTTP概要 理解Web服务器端: 编写HTTP(超文本传输协议)服务器端,即Web服务器端,我们可以这样定义它:基于HTTP协议,将网页对应文件传输给客服端的服务器端。HTTP是以超文本传输为目的而设计的应用层协议,这种协议同样属于基于TCP/IP实现的协议。 好,再来看看这样一个例子帮助我们理解:想想我们平时用浏览器打开某个网页,首先浏览器地址栏输入url确认,这其实就是向Web服务器端发送原创 2015-10-28 11:55:31 · 2780 阅读 · 0 评论 -
TCP/IP网络编程 基于Linux编程_4 --多线程服务器端的实现
线程基本概念前面我们讲过多进程服务器,但我们知道它开销很大,因此我们才引入线程,我们可以把它看成是一种轻量级进程。它相比进程有如下几个优点: 线程的创建和上下文切换开销更小且速度更快。 线程间交换数据时无需特殊技术。 进程:在操作系统构成单独执行流的单位。 线程:在进程构成单独执行流的单位。 它们的包含关系是,操作系统 > 进程 > 线程。进程与线程具体差异其实是这样的,每个进程都有独立的完整内原创 2015-10-24 16:46:10 · 2414 阅读 · 0 评论 -
TCP/IP网络编程 基于Linux编程_3 --优于select的epoll
前言:关于并发服务器中的I/O复用实现方式,前面我们讲过select的方式,但select的性能比较低,并不适合以Web服务器端开发为主流的现代开发环境。因此就有了Linux下的epoll,BSD的kqueue,Solaris的/dev/poll和Windows的IOCP等复用技术。本章就来讲讲Linux下的epoll技术。epoll理解及应用 基于select的I/O复用技术速度慢的原因: 1,原创 2015-10-20 16:36:20 · 2249 阅读 · 0 评论 -
TCP/IP网络编程 基于Linux编程_2 --I/O流分离的半关闭问题
理论基础 流:调用fopen打开文件后进行文件读写操作会创建流,套接字网络通信也会创建流,流是以数据收发为目的的一种桥梁,其实就是指数据的流动,我们可以理解为数据收发的路径。 I/O流分离:是指把数据的发送与接收流分开处理,由2个不同对象控制而不是交个1个对象。我们之前讲过2种I/O流分离的方法,第一种:通过调用fork函数创建子进程,父进程负责接收数据,子进程负责发送数据(学习笔记_11)。第二种原创 2015-10-13 15:04:51 · 1411 阅读 · 0 评论 -
TCP/IP网络编程 基于Linux编程_1 --套接字中标准I/O的使用
标准I/O1,什么是标准I/O?其实是指C语言里的文件操作函数,如:fopen,feof,fgetc,fputs等函数,他们和平台无关。2,网络通信中使用标准I/O的优点: 良好的移植性。良好移植性这个不需多解释,不仅是I/O函数,所有的标准函数都具有良好的移植性。因为,为了支持所有的操作系统(编译器),这些函数都是按照ANSI C标准定义的。 标准I/O函数可以利用缓冲提高性能。在网络通信中,re原创 2015-09-09 16:01:18 · 1486 阅读 · 0 评论 -
TCP/IP网络编程 学习笔记_1 --网络编程入门
网络编程和套接字 网络编程其实和我们计算机上的文件读取操作很类似,通俗地讲,网络编程就是编写程序使两台联网的计算机相互交换数据。那么,数据具体怎么传输呢?其实操作系统会提供名为“套接字”的部件,套接字就是网络数据传输用的软件设备而已。即使你对网络数据传输原理不太熟悉,你也可以通过套接字完成数据传输。因此,网络编程常常又称为套接字编程。 下面我们再通过一个通俗地例子来理解什么是套接字并给出创建它的过程原创 2015-07-06 09:56:34 · 6698 阅读 · 1 评论 -
TCP/IP网络编程 学习笔记_2 --套接字类型与协议设置
什么是协议先想象一下这样一个情形:如果相隔很远的两个人要展开对话,必须先决定对话方式。如果一方使用电话,那么另一方也只能使用电话,而不是书信。可以说,这里电话就是两人对话的协议,协议是对话中使用的通信规则。拓展到计算机,协议就是为了完成数据交换而定好的约定。创建套接字1,先来看看创建套接字的函数: int socket(int domain, int type, int protocol);原创 2015-07-09 10:38:22 · 3896 阅读 · 3 评论 -
TCP/IP网络编程 学习笔记_3 --给套接字分配IP地址和端口号
IP地址和端口号1,IP地址:为使计算机连接到网络并收发数据,必须为其分配IP地址。IP地址分为两类:IPv4(4字节地址族)和IPv6(16字节地址族)。它们主要区别就是在表示IP地址所用的字节数,IPv6就是为了应对IPv4地址耗尽而提出来的。现在主要使用的还是IPv4,IPv4标准的4字节IP地址是由网络地址和主机(指计算机)地址组成,且分为A,B,C,D,E等类型。 这个数据传输过程大原创 2015-07-09 17:16:56 · 6824 阅读 · 0 评论 -
TCP/IP网络编程 学习笔记_4 --OSI七层网络模型
前言:本节将概括性的总结下网络通信的整体框架,其底层流程。 我们之前了解到了套接字的创建及应用,其实我们只是在用套接字这个工具而已,其底层细节对我们是屏蔽的。要通过因特网完成数据传输,其实不光光是软件就能解决的,还需要构建硬件系统等。因此,为了解决这一难题,许多专家聚集在一起,这些人是硬件,系统,路由算法等各领域的顶级专家。他们把网络通信划分很多模块,通过层次化的结构把大问题分成若干小问题逐个攻破。原创 2015-07-13 10:48:27 · 2386 阅读 · 0 评论 -
TCP/IP网络编程 学习笔记_5 --基于TCP的服务端/客服端
TCP服务端/客服端默认函数调用顺序 服务端顺序如下: 1,socket() 创建套接字 2,bind() 分配套接字地址 3,listen() 等待连接请求状态 4,accept() 连接(阻断函数,直到有连接请求后才返回) 5,read()/write() 数据交换 6,close() 断开连接 客服端顺序如下: 1,socket() 创建套接字原创 2015-07-13 15:44:47 · 4363 阅读 · 2 评论 -
TCP/IP网络编程 学习笔记_6 --定义应用层协议
前言:上一章节写了个回声客服端,回顾一下,客服端是循环读取已知的数据长度,但更多的情况是我们一般无法提前知道数据的长度,那么此时应该如何收发数据?这时需要的就是应用层协议的定义。如:上一节写的回声程序中定义“收到Q就立即终止连接”这么个协议(规则),就是应用层协议。同样,收发数据过程中也需要定好规则以表示数据的边界,或提前告知收发数据的大小。所谓应用层协议就是服务端/客服端实现过程中逐步定义的规则的原创 2015-07-14 16:36:01 · 2129 阅读 · 0 评论 -
TCP/IP网络编程 学习笔记_7 --基于UDP的服务端/客服端
理解UDP UDP套接字的特点:在笔记2中讲套接字类型有提,类似信件或邮件的传输。UDP在数据传输过程中可能丢失,如果只考虑可靠性,TCP的确比UDP好。但UDP在结构上比TCP更简洁。UDP没有ACK,SEQ那样的操作,因此,UDP的性能有时比TCP高出很多。编程中实现UDP也比TCP简单。另外,虽然UDP是不可靠的数据传输,但也不会像想象中那么频繁地发生数据丢失。因此,在更重视性能而非可靠性的情原创 2015-08-07 11:31:03 · 3179 阅读 · 0 评论 -
TCP/IP网络编程 学习笔记_8 --优雅地断开套接字连接
基于TCP的半关闭TCP中的断开连接过程比建立连接过程更重要,因为建立连接过程一般不会出现什么大的变数,但断开过程就有可能发生预想不到的情况,因此要准确的掌控。 单方面断开连接带来的问题 Linux的close函数和Windows的closesocket函数是完全断开连接。完全断开是指无法传输数据也不能接收数据。因此,一方这样直接断开连接就显得不太优雅了。如:主机A发送完最后的数据后,调用clos原创 2015-08-10 10:26:11 · 3356 阅读 · 0 评论 -
TCP/IP网络编程 学习笔记_9 --域名系统(DNS)
域名系统 什么是域名:我们网络通信底层最终还是通过IP地址来确认通信目标的,但以数字命名的IP地址非常难记,因此,我们就有了容易记,易表述的域名来取代IP地址。如,百度域名就是:www.baidu.com,而它的IP地址为:180.97.33.107,用这两种任何一种访问都是一样的效果。 DNS服务器: 1,DNS即Domain Name System,它是一个可以对IP地址和域名进行相互转换的系原创 2015-08-12 19:38:15 · 3340 阅读 · 0 评论 -
TCP/IP网络编程 学习笔记_10 --套接字的多种可选项
前言:套接字其实具有多种特性,这些特性是可以通过可选项更改或查看的。我们前面使用套接字只是使用它的默认特性而已。但是在实际网络编程中,我们常常需要根据需求修改默认特性。本章我们就来介绍查看和修改套接字可选项的方法。 套接字多种可选项:套接字可选项是分层的,如:SOL_SOCKET层,IPPROTO_IP层,IPPROTO_TCP层等,每一层都对应有多种特性字段。 查看和修改可选项的函数: int原创 2015-08-13 17:57:32 · 2133 阅读 · 0 评论 -
TCP/IP网络编程 学习笔记_11 --多进程服务器端
并发服务器首先,我们来假设有下面这样两种类型的服务器:第一种,第一个连接请求的受理时间为1s,第50个连接请求的受理时间为50s,第100个连接请求的受理时间为100s。即同时很多客服端连接,需要依次排队受理,但只要受理了,他们的服务时间平均只需1s。第二种,所有连接请求的受理时间不超过1s,但平均服务时间要2~3s。 即使有可能延长服务时间,我们实际网络编程中也一般选择第二种方式,使其可以同时向原创 2015-08-18 18:40:30 · 2402 阅读 · 0 评论 -
TCP/IP网络编程 学习笔记_12 --进程间通信
进程间通信的基本概念进程间通信意味着两个不同进程间可以交换数据,但从上一章节我们知道,不同进程间内存是相互独立的,那么要实现不同进程间通信,就得有一个它们都能访问的公共区域内存做媒介,这个媒介不属于进程,而是和套接字一样,属于操作系统。所以,两个进程通过操作系统提供的内存空间进行通信,我们把这块内存空间称作管道。 创建管道函数 int pipe(int filedes[2]); 成功原创 2015-08-19 14:45:00 · 2062 阅读 · 0 评论 -
TCP/IP网络编程 学习笔记_13 --基于I/O复用的服务端
前言:前面我们讲了多进程的并发服务端,只要有客服端连接请求就会创建新进程,这虽然也是一种解决方案,但创建进程是需要付出极大代价的,这需要大量运算和内存空间,而且每个进程间具有独立的内存空间,所以相互间的数据交换也相对复杂(管道)。 本章将讨论并发服务器的第二种实现方法——基于I/O复用的服务器端构建。I/O复用 什么是I/O复用?通俗点讲,其实就是一个事件监听,只是这个监听的事件一般是I/O操作里原创 2015-08-31 17:58:38 · 1782 阅读 · 0 评论 -
TCP/IP网络编程 学习笔记_14 --多种I/O函数(数据传输扩展)
前言:之前我们讲的数据传输一般Linux上用write和read,Windows上用send和recv。其实Linux上也可以用send和recv,它与write和read主要区别是它的最后一个参数可以附带一些扩展功能。Linux中的send和recv 基础 ssize_t send(int sockfd, const void *buf, size_t nbytes, int flags);原创 2015-09-07 11:51:00 · 1881 阅读 · 0 评论 -
TCP/IP网络编程 学习笔记_15 --多播与广播
前言:想想这么一种情况,网络电台可能需要同时向成千上万的用户传输相同的数据,如果用我们以前讲过的传输形式,每个用户都传输一次,这样肯定是不合理的。因此,就引入了多播技术来解决这个问题,它可以同时向大量用户发送相同数据。其基本原理是这样的:有个多播组,只要加入这个组里的所有客服端,服务端发送的数据它们都能收到,具体传输到多播组里的每个客户是由路由完成的(如果路由器不支持多播或网络堵塞,实现多播也会使用原创 2015-09-08 10:58:40 · 3538 阅读 · 0 评论