随笔分类 -  TCP/IP网络编程

摘要:线程存在的问题和临界区 上一章TCP/IP网络编程之多线程服务端的实现(一)的thread4.c中,我们发现多线程对同一变量进行加减,最后的结果居然不是我们预料之内的。其实,如果多执行几次程序,会发现每次程序计算的结果都不一样。那么,造成这样的原因是什么呢? 现在,假设我们一个全局变量sum的值为9 阅读全文
posted @ 2018-09-27 21:30 北洛 阅读(1420) 评论(0) 推荐(0)
摘要:为什么引入线程 为了实现服务端并发处理客户端请求,我们介绍了多进程模型、select和epoll,这三种办法各有优缺点。创建(复制)进程的工作本身会给操作系统带来相当沉重的负担。而且,每个进程有独立的内存空间,所以进程间通信的实现难度也会随之提高。且进程的切换同样也是不菲的开销。什么是进程切换?我们 阅读全文
posted @ 2018-09-26 21:36 北洛 阅读(8478) 评论(0) 推荐(1)
摘要:分离I/O流 “分离I/O流”是一种常用表达,有I/O工具可以区分二者。无论使用何种办法,都可以认为分离I/O流。我们之前通过两种方法分离I/O流,第一种是TCP/IP网络编程之进程间通信中的“TCP I/O过程(Routine)分离”,这种方法通过调用fork函数复制出一个文件描述符,以区分输入和 阅读全文
posted @ 2018-09-25 20:33 北洛 阅读(668) 评论(0) 推荐(0)
摘要:epoll的理解及应用 select复用方法由来已久,因此,利用该技术后,无论如何优化程序性能也无法同时接入上百个客户端。这种select方式并不适合以web服务端开发为主流的现代开发环境,所以要学习Linux平台下的epoll。我们先来看TCP/IP网络编程之I/O复用的echo_selectse 阅读全文
posted @ 2018-09-25 20:33 北洛 阅读(560) 评论(0) 推荐(0)
摘要:基于epoll的回声服务端 在TCP/IP网络编程之优于select的epoll(一)这一章中,我们介绍了epoll的相关函数,接下来给出基于epoll的回声服务端示例。 echo_epollserv.c 之前解释过关键代码,而且程序结构与select方式没有区别,故省略代码说明。 条件触发和边缘触 阅读全文
posted @ 2018-09-25 20:33 北洛 阅读(1031) 评论(0) 推荐(0)
摘要:标准I/O函数 标准标准I/O函数有两个优点: 标准I/O函数具有良好的移植性 标准I/O函数可以利用缓冲提高性能 关于移植性无需过多解释,不仅是I/O函数,所有标准函数都具有良好的移植性。因为,为了支持所有操作系统(编译器),这些函数都是按照ANSIC标准定义的。当然,这并不局限于网络编程,而是适 阅读全文
posted @ 2018-09-25 20:32 北洛 阅读(724) 评论(0) 推荐(0)
摘要:进程间通信基本概念 进程间通信意味着两个不同进程间可以交换数据,为了完成这一点,操作系统中应提供两个进程可以同时访问的内存空间。但我们知道,进程具有完全独立的内存结构,就连通过fork函数创建的子进程也不会和父进程共享内存,因此,进程间通信只能通过其他特殊方法完成 基于管道实现进程间通信 图1-1表 阅读全文
posted @ 2018-09-25 20:32 北洛 阅读(5335) 评论(0) 推荐(0)
摘要:基于I/O复用的服务端 在前面章节的学习中,我们看到了当有新的客户端请求时,服务端进程会创建一个子进程,用于处理和客户端的连接和处理客户端的请求。这是一种并发处理客户端请求的方案,但并不是一个很好的方案,因为创建进程时需要付出很大的代价,需要大量的运算和内存空间,由于每个进程都具有独立的内存空间,所 阅读全文
posted @ 2018-09-25 20:32 北洛 阅读(1274) 评论(0) 推荐(0)
摘要:send和recv函数 在之前的学习中,我们在不少示例中用到send和recv这两个函数,但一直没有详细解释过着两个函数中每个参数的含义。本节将介绍Linux平台下的send&recv函数 sockfd:表示与数据传输对象的连接的套接字文件描述符 buf:保存待传输数据的缓冲地址值 nbytes:待 阅读全文
posted @ 2018-09-25 20:32 北洛 阅读(1138) 评论(0) 推荐(0)
摘要:多播 多播方式的数据传输是基于UDP完成的,因此,与UDP服务端/客户端的实现非常接近。区别在于,UDP数据传输以单一目标进行,而多播数据同时传递到加入(注册)特定组的大量主机。换言之,采用多播方式时,可以同时向多个主机传递数据 多播的数据传输方式及流量方面的优点: 多播服务端针对特定多播组,只发送 阅读全文
posted @ 2018-09-25 20:32 北洛 阅读(859) 评论(0) 推荐(0)
摘要:进程概念及应用 我们知道,监听套接字会有一个等待队列,里面存放着不同客户端的连接请求,如果有一百个客户端,每个客户端的请求处理是0.5s,第一个客户端当然不会不满,但第一百个客户端就会有相当大的意见了。为了要使得所有客户端都尽可能的满意,我们应采用并发服务端,使其同时向所有发起请求的客户端提供服务。 阅读全文
posted @ 2018-09-25 20:31 北洛 阅读(2460) 评论(0) 推荐(0)
摘要:信号处理 本章接上一章TCP/IP网络编程之多进程服务端(一),在上一章中,我们介绍了进程的创建和销毁,以及如何销毁僵尸进程。前面我们讲过,waitpid是非阻塞等待子进程销毁的函数,但有一个不好的缺点就是要每隔一段时间判断子进程是否销毁,只有销毁完后才能执行父进程接下去的程序。这样显然会造成父进程 阅读全文
posted @ 2018-09-25 20:31 北洛 阅读(1071) 评论(0) 推荐(0)
摘要:套接字可选项进而I/O缓冲大小 我们进行套接字编程时往往只关注数据通信,而忽略了套接字具有的不同特性。但是,理解这些特性并根据实际需要进行更改也十分重要。之前我们写的程序在创建好套接字后都是未经特别操作就直接使用,此时通过默认的套接字特性进行数据通信。之前的示例比较简单,无需特别操作套接字特性,但有 阅读全文
posted @ 2018-09-22 09:57 北洛 阅读(1140) 评论(0) 推荐(0)
摘要:域名系统 DNS是对IP地址和域名进行互相转换的系统,其核心是DNS服务器。提供网络服务的服务端也是通过IP地址来区分的,但由于IP地址难于记忆,因此通过容易记忆并表述的域名来取代IP地址 在浏览器地址栏输入www.baidu.com,或如图1-1用ping命令获取其IP地址,便可访问百度主页,那么 阅读全文
posted @ 2018-09-21 20:59 北洛 阅读(3248) 评论(0) 推荐(0)
摘要:基于TCP套接字的半关闭 Linux的close函数和Windows的closesocket函数意味着完全断开连接,完全断开连接不仅指无法传输数据,而且也不能接收数据。因此,在某些情况下,通信一方调用close或closesocket函数断开连接就显得不太优雅,如图1-1 图1-1 单方面断开连接 阅读全文
posted @ 2018-09-21 05:56 北洛 阅读(999) 评论(0) 推荐(0)
摘要:理解UDP 在之前学习TCP的过程中,我们还了解了TCP/IP协议栈。在四层TCP/IP模型中,传输层分为TCP和UDP这两种。数据交换过程可以分为通过TCP套接字完成的TCP方式和通过UDP套接字完成的UDP方式 UDP套接字的特点 下面通过信件讲解UDP的工作原理,寄信前应先在信封上填好寄信人和 阅读全文
posted @ 2018-09-17 18:41 北洛 阅读(1532) 评论(0) 推荐(0)
摘要:回声客户端问题 上一章TCP/IP网络编程之基于TCP的服务端/客户端(一)中,我们解释了回声客户端所存在的问题,那么单单是客户端的问题,服务端没有任何问题?是的,服务端没有问题,现在先让我们回顾下服务端的I/O代码 echo_server.c 接着,我们回顾客户端的代码 echo_client.c 阅读全文
posted @ 2018-09-16 18:11 北洛 阅读(1911) 评论(0) 推荐(0)
摘要:理解TCP和UDP 根据数据传输方式的不同,基于网络协议的套接字一般分为TCP套接字和UDP套接字。因为TCP套接字是面向连接的,因此又称为基于流(stream)的套接字。TCP是Transmission Control Protocol(传输控制协议)的简写,意为“对数据传输过程的控制”。因此,学 阅读全文
posted @ 2018-09-16 13:15 北洛 阅读(40463) 评论(2) 推荐(3)
摘要:分配IP地址和端口号 IP是Internet Protocol(网络协议)的简写,是为收发网络数据而分配给计算机的值。端口号并非赋予计算机的值,而是为区分程序中创建的套接字而分配给套接字的序号 网络地址(Internet Address) 为使计算机连接到网络并收发数据,必须向其分配IP地址。IP地 阅读全文
posted @ 2018-09-09 18:00 北洛 阅读(2474) 评论(0) 推荐(0)
摘要:套接字与协议 如果相隔很远的两人要进行通话,必须先决定对话方式。如果一方使用电话,另一方也必须使用电话,而不是书信。可以说,电话就是两人对话的协议。协议是对话中使用的通信规则,扩展到计算机领域可整理为“计算机间对话必备通信规则” 在TCP/IP网络编程之网络编程和套接字这一章中,我们已经介绍了如何创 阅读全文
posted @ 2018-09-09 12:20 北洛 阅读(1212) 评论(0) 推荐(0)