随笔分类 - Network--->TCP/IP网络编程
摘要:1、socket缓冲区 每个 socket 被创建后,都会分配两个缓冲区,输入缓冲区和输出缓冲区。 write()/send() 并不立即向网络中传输数据,而是先将数据写入缓冲区中,再由TCP协议将数据从缓冲区发送到目标机器。一旦将数据写入到缓冲区,函数就可以成功返回,不管它们有没有到达目标机器,也
阅读全文
摘要:1、线程概念 1.1、为什么引入线程 为了实现服务端并发处理客户端请求,我们介绍了多进程模型、select和epoll,这三种办法各有优缺点。创建(复制)进程的工作本身会给操作系统带来相当沉重的负担。而且,每个进程有独立的内存空间,所以进程间通信的实现难度也会随之提高。 多进程模型的缺点概括如下:
阅读全文
摘要:一、多路复用模型 二、select()、poll()、epoll() select,poll,epoll都是IO多路复用的机制。I/O多路复用就是通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作。 select,poll,epoll本质上
阅读全文
摘要:1、多进程服务器得缺点和解决方法 在多进程服务器中,我们看到了当有新的客户端请求时,服务端进程会创建一个子进程,用于处理和客户端的连接和处理客户端的请求。这是一种并发处理客户端请求的方案,但并不是一个很好的方案,因为创建进程时需要付出很大的代价,需要大量的运算和内存空间,由于每个进程都具有独立的内存
阅读全文
摘要:1、进程概念及应用 我们知道,监听套接字会有一个等待队列,里面存放着不同客户端的连接请求,如果有一百个客户端,每个客户端的请求处理是0.5s,第一个客户端当然不会不满,但第一百个客户端就会有相当大的意见了。为了要使得所有客户端都尽可能的满意,我们应采用并发服务端,使其同时向所有发起请求的客户端提供服
阅读全文
摘要:1、send和recv函数 在之前的学习中,我们在不少示例中用到send和recv这两个函数,但一直没有详细解释过着两个函数中每个参数的含义。本节将介绍Linux平台下的send&recv函数 #include <sys/socket.h> ssize_t recv(int sockfd, cons
阅读全文
摘要:1、域名系统 DNS是对IP地址和域名进行互相转换的系统,其核心是DNS服务器。 1.1、什么是域名 提供网络服务的服务端也是通过IP地址来区分的,但由于IP地址难于记忆,因此通过易记忆、易表述的域名来取代IP地址。 1.2、DNS服务器 在浏览器地址栏输入www.baidu.com,或用ping命
阅读全文
摘要:1、基于TCP套接字的半关闭 Linux的close函数和Windows的closesocket函数意味着完全断开连接,完全断开连接不仅指无法传输数据,而且也不能接收数据。因此,在某些情况下,通信一方调用close或closesocket函数断开连接就显得不太优雅,如图1-1 图1-1 单方面断开连
阅读全文
摘要:1、什么是IO 我们都知道在Unix/Linux世界里,一切皆文件。而文件是什么呢?文件就是一串二进制流而已,不管socket、FIFO、管道、终端还是其他什么,对我们来说,一切都是文件,一切都是流。在信息交换的过程中,我们都是对这些流进行数据的读写操作,简称为I/O操作(input and out
阅读全文
摘要:1、编程流程 服务器端创建套接字后连续调用bind、listen函数进入等待状态,客户端通过调用connect函数发起连接请求。需要注意的是,客户端只能等到服务器调用listen函数后才能调用connect()函数。同时要清楚,客户端调用connect()函数前,服务器端有可能率先调用accept(
阅读全文
摘要:1、套接字概述 1.1、套接字定义 套接字最早是由BSD(伯克利软件套件)在1982年引入的通信机制,目前已被广泛移植到主流的操作系统中。 对于应用开发人员来说,套接字(socket)是一个抽象层,是一种特殊的I/O接口,独立于具体协议的网络编程接口,也是一种文件描述符。应用程序可以通过它发送或接收
阅读全文

浙公网安备 33010602011771号