
网络编程
lzhf1122
这个作者很懒,什么都没留下…
展开
-
一、理解网络编程和套接字
理解网络编程和套接字服务器端套接字创建过程:第一步:调用socket函数创建套接字第二步:调用bind函数分配IP地址和端口号第三步:调用listen函数转为可接收请求状态第四步:调用accept函数受理连接请求...原创 2018-05-12 10:16:34 · 260 阅读 · 0 评论 -
十三 多线程服务器端的实现
线程相比于进程具有如下优点:1.线程的创建和上下文切换比进程的创建和上下文切换要快.上下文切换时不需要切换数据区和堆.2.线程间交换数据时无需特殊技术.可以利用数据区和堆交换数据.线程同步(两方面)1.同时访问同一内存空间时发生的情况.2.需要指定访问同一内存空间的线程执行顺序的情况.信号量示例(控制访问顺序的同步)示例场景: 线程A从用户输入得到值后存入全局变量nu...原创 2018-05-30 21:44:10 · 319 阅读 · 0 评论 -
十二 优于select的epoll
基于select的I/O复用技术速度慢的原因:调用select函数后常见的针对所有文件描述符的循环语句。每次调用select函数后都需要向该函数传递监视对象信息。epoll函数的优点正好与select缺点相反:无需编写以监视状态变化为目的的针对所有文件描述符的循环语句。调用对应于select函数的epoll-wait函数时无需每次传递监视对象信息。实现epoll时必要的函数:epoll_creat...原创 2018-05-30 20:12:32 · 383 阅读 · 0 评论 -
十一 I/O复用
多进程服务器端的缺点:1.创建进程的开销2.进程间数据交换复杂(每个进程有独立的内存空间)理解select函数并实现服务器端select函数的调用方法和顺序:设置文件描述符:调用select函数后查看结果:实现I/O复用服务器端:#include <stdio.h>#include <stdlib.h>#include <string.h>#include...原创 2018-05-30 14:09:27 · 251 阅读 · 0 评论 -
十 进程间通信
进程间通信意味着两个不同进程间可以交换数据,为了完成这一点,操作系统中应该提供两个进程可以同时访问的内存空间。通过管道实现进程间通信为了完成进程间通信,需要创建管道。管道并非属于进程的资源,而是和套接字一样,属于操作系统。一个管道有两个文件描述符,用作管道的出口和入口。如下图,父子进程都可以访问管道的I/O路径,但子进程仅用输入路径,父进程仅用输出路径。通过管道进行进程间双向通信1个管道无法完成双...原创 2018-05-30 13:32:30 · 224 阅读 · 0 评论 -
九 多进程服务器端
并发服务器端的实现方法并发服务器可同时向发起请求的客户端提供服务,以提高平均满意度和有效利用cpu。实现模型和方法:多进程服务器 ,多路复用服务器 ,多线程服务器。理解进程进程:占用内存空间的的正在运行的程序。如果父进程终止,处于僵尸状态的子进程将同时销毁。父进程往往与子进程一样繁忙,因此不能只调用waitpid函数以等待子进程终止。可利用信号处理技术消灭僵尸进程,子进程终止时将产生SIGCHLD...原创 2018-05-30 10:57:31 · 214 阅读 · 0 评论 -
八 套接字的多种可选项
8.1 I/O缓冲大小SO_RCVBUF是输入缓冲大小相关可选项,SO_SNDBUF是输出缓冲大小相关可选项。用这2个可选项既可以读取当前I/O缓冲大小,也可以进行更改。系统不会100%按照我们的请求设置缓冲大小,因为要实现流控制和错误发生时的重传机制,至少要有一些缓冲空间吧?8.2 SO_REUSEADDR选项SO_REUSEADDR选项及其Time-wait状态很重要。在服务器端控制台输入CT...原创 2018-05-29 22:04:24 · 235 阅读 · 0 评论 -
七 域名及网络地址
DNS是对IP地址和域名进行转换的系统,其核心是DNS服务器。所有计算机中都记录着默认DNS服务器地址,就是通过这个默认DNS服务器得到相应域名的IP地址信息。Linux系统中:输入nslookup后再输入server可得到默认DNS服务器地址。计算机内置的默认DNS服务器并不知道网络上所有域名的IP地址信息。若该DNS服务器无法解析,则会询问其他DNS服务器,并提供给用户,如下图:...原创 2018-05-29 19:47:46 · 293 阅读 · 0 评论 -
六 基于UDP的服务器端/客户端
在更重视性能而非可靠性的情况下,UDP是一种很好的选择。实现基于UDP的服务器端/客户端UDP中的服务器端和客户端没有连接,因此每次传输数据都要添加目标地址信息。UDP服务器端和客户端均只需1个套接字服务器端: /* UDP回声服务器端uecho_server.c */ #include<stdio.h> #include<stdlib.h> ...原创 2018-05-29 19:34:32 · 367 阅读 · 0 评论 -
五 基于TCP的服务器端/客户端(2)
定义应用层协议收发数据过程中需要定好规则(协议)以表示数据的边界,或提前告知收发数据的大小。所以应用层协议就是为特定程序的实现而制定的规则。计算器服务器端/客户端的程序示例客户端:#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>#includ...原创 2018-05-29 17:15:28 · 253 阅读 · 0 评论 -
四 基于TCP的服务器端/客户端(1)
TCP/IP协议栈链路层:物理网络连接结构IP层:向目标传输数据需要经过哪条路径?TCP/UDP层:又称传输层,IP层只关注一个数据包的传输过程,即使传输多个数据包,每个数据包也是由IP层实际传输的,也就是说,传输的顺序及传输本身不可靠的。若只利用IP层传输数据,则有可能导致后传输的数据包B比先传输的数据包A先到达目的地。也有可能在传输的过程中丢失A,反之如果添加TCP协议的话就不会出现这种情况。...原创 2018-05-29 16:14:43 · 253 阅读 · 0 评论 -
三、地址族与数据序列
IP是为收发网络数据而分配给计算机的值。端口号是为区分程序中创建的套接字而分配给套接字的序号。服务器端常见套接字初始化过程:int serv_sock; struct sockaddr_in serv_addr; char *serv_port = "9190"; //创建服务器端套接字(监听套接字) serv_sock = socket(PF_INET,SOCK_STREA...原创 2018-05-14 09:29:46 · 290 阅读 · 0 评论 -
二、套接字类型与协议设置
1,先来看看创建套接字的函数:int socket(int domain, int type, int protocol); 成功返回文件描述符(整型),失败返回-1。 domain:协议族,type:数据传输类型,protocol:具体协议2.套接字类型(type)套接字类型1:面向连接的套接字(SOCK_STREAM)特征: 传输过程中数据不会消失; 安序传输数据; 传输...原创 2018-05-14 08:55:01 · 451 阅读 · 0 评论 -
十四 制作http服务器端
HTTP概要理解Web服务器端: 编写HTTP(超文本传输协议)服务器端,即Web服务器端,我们可以这样定义它:基于HTTP协议,将网页对应文件传输给客服端的服务器端。HTTP是以超文本传输为目的而设计的应用层协议,这种协议同样属于基于TCP/IP实现的协议。 好,再来看看这样一个例子帮助我们理解:想想我们平时用浏览器打开某个网页,首先浏览器地址栏输入url确认,这其实就是向Web服务器端发送请求...转载 2018-05-30 22:10:17 · 891 阅读 · 0 评论