
网络编程
zpznba
日日行,不怕千万里。常常做,不怕千万事。
展开
-
进程和僵尸进程
进程状态状态 说明 R running or runnable (on run queue) D uninterruptible sleep (usually I/O) S interruptible sleep (waiting for an event to complete) Z zombie (terminated but not reap...原创 2019-02-02 21:49:25 · 287 阅读 · 0 评论 -
强制重启处于TIME_WAIT状态的sock
有时候我们希望避免TIME_WAIT状态,因为当程序退出后,我们希望能够立即重启它。但由于处在TIME_WAIT状态的连接还占用着端口,程序将无法启动(直到2MSL超时时间结束)。考虑一个例子:在测试机器ernest-laptop上以客户端方式运行nc命令,登录本机的Web服务,且明确指定客户端使用12345端口与服务器通信。然后从终端输入Ctrl+C终止客户端程序,接着又立即重启nc程序,以完全...原创 2019-05-12 11:24:38 · 477 阅读 · 0 评论 -
从零开始一个http服务器(一)【实战系列,持续更新】
一个简单的socket server写一个helloworld 复习c语言的socket API 一个简单的socket server 用telent测试从helloworld 开始先来回顾下c语言的,c语言的helloword程序如下// main.c#include<stdio.h>int main() { printf("hello worl...原创 2019-04-08 22:30:46 · 759 阅读 · 0 评论 -
从零开始一个http服务器(二)【实战系列,持续更新】
首先先来了解一下HTTP的基本知识:HTTP下午茶本节我们来解析一下浏览器的请求,重点分为以下几步:解析http request观察收到的http数据 解析 request 请求行 的 method url version 解析 header 解析 body观察收到的http请求上一节我们完成了一个简单的基于TCP/IP的socket server 程序。那么接下来底层...原创 2019-04-12 10:31:09 · 384 阅读 · 1 评论 -
Reactor和proactor模式
两种高效的事件处理模式前言 网络服务在处理数以万计的客户端连接时,往往出现效率低下甚至完全瘫痪,这被 称为C10K问题。C10K问题最早提出于2003年,10多年间,随着互联网的迅速发展,越来越多的网络服务面临的不再是C10K问题,而是C10M问题!典型的多线程服务器的线程模型 最开始的网络编程服务器是用一个while循环来监听新的套接字连接,然后用一个函数...转载 2019-04-08 11:50:45 · 1201 阅读 · 1 评论 -
Linux IO模型及 select、poll、epoll详解
一、IO模型对于一次IO访问(以read举例),数据会先被拷贝到操作系统内核的缓冲区中,然后才会从操作系统内核的缓冲区拷贝到应用程序的地址空间。所以说,当一个read操作发生时,它会经历两个阶段:1. 等待数据准备 (Waiting for the data to be ready)2. 将数据从内核拷贝到进程中 (Copying the data from the kernel to ...原创 2019-03-08 18:22:00 · 400 阅读 · 0 评论 -
《TCP/IP网络编程》第十二章读书笔记
1. IO复用模型与多进程模型对比:a. 多进程模型:需要大量的运算和内存空间,进程间数据交换复杂IPC。b. IO复用模型可以不创建多进程同时又向多个客户端提供服务,但是并不适用于所有情况。2. select函数,将多个文件描述符集中在一起统一监视。监视项目有:是否存在套接字接收数据;无需阻塞传输数据的套接字有哪些;哪些套接字发生异常;三个集合:{可读、可写和...原创 2019-02-08 12:57:21 · 298 阅读 · 0 评论 -
《TCP/IP网络编程》第十章读书笔记
1. 并发服务器端实现模型和方法:a. 多进程服务器:通过创建多个进程提供服务b. 多路复用服务器:通过捆绑并统一管理IO对象提供服务(select和epoll)c. 多线程服务器:通过生成与客户端等量的线程提供服务2. 通过fork函数创建进程:复制正在运行的调用fork函数的进程,复制相同的内存空间。两个进程都执行fork函数以后的语句#include <unist...原创 2019-02-02 22:03:20 · 284 阅读 · 0 评论 -
网络编程bind 函数详解
bind 函数如何选择绑定地址我们知道bind函数一般用在服务器代码中:struct sockaddr_in bindaddr;bindaddr.sin_family = AF_INET;bindaddr.sin_addr.s_addr = htonl(INADDR_ANY);bindaddr.sin_port = htons(3000);if (bind(listenfd, (...原创 2019-06-04 10:10:59 · 2013 阅读 · 0 评论