![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
计算机网络编程
文章平均质量分 81
记录网络编程的学习笔记
Mark_404
自由、博爱、专一
展开
-
十八、多线程服务器的实现
文章目录实验任务实验涉及的技术实验代码本章不会去专门将多线程以及多线程相关的操作函数,有兴趣可以自己去查阅相关资料,我想网上有许多关于多线程机制的优秀资料。我会直接编写代码,直接看代码就行实验任务模拟多人聊天,即群聊。服务器接收来自各个客户端的信息,然后一一转发给群中的客户端。实验涉及的技术多线程机制网络编程实验代码服务端:负责接收来自各个客户端的消息,并转发给所有群内的客户端。#include <stdio.h>#include <stdlib.h>原创 2021-08-11 13:55:43 · 86 阅读 · 0 评论 -
十七、 epoll实现I/O复用
文章目录epoll理解与应用使用epoll改写回声服务端条件触发和边缘触发条件触发边缘触发使用边缘触发的回声服务器端边缘触发优点这一章的目的与I/O复用有关,之前我们 谈到的基于select函数实现的I/O复用技术,由于该技术是一个非常古老的技术,不适用于现代高并发的环境下的使用。因此需要借用新技术来替代select函数的I/O复用。epoll理解与应用理解epoll还需对照select函数进行对比,一般实现复用主要有三步:创建保存文件描述符的空间向这个空间注册或注销文件描述符监控空间内的原创 2021-08-10 20:21:19 · 151 阅读 · 0 评论 -
十六、关于IO流分离的内容
文章目录1. 什么是I/O流分离?2. 为什么需要I/O分流3. 当我们用fclose()无法实现半关闭的原因4. 实现真正的半关闭1. 什么是I/O流分离?回忆我们之前写的程序,最开始写的程序只要获得一个套接字并成功连接服务器,就能实现与服务器之间的数据交换,而这个数据交换从客户端角度看就是发送数据与接收数据; 而这个收发数据的过程称为流。而I/O流分离是指接收数据的流与发送数据的流实现分离,这里的分离指的是操作彼此隔离,一个流关闭不影响另外一个流的使用。这才是I/O流分离的真正理解。其实在这之前我们原创 2021-08-08 16:55:57 · 466 阅读 · 0 评论 -
十五、套接字和标准IO
本章主要是复习标准I/O函数收发数据的方法,例如fopen()、feof()、fgetc()、fputs(),以及将套接字文件描述符转换成FILE*结构体指针并采用标准I/O修改程序。标准I/O函数不同于系统函数,标准I/O函数是在系统函数的基础上,进行优化。系统I/O函数不再介绍,感兴趣可以去查阅《Unix系统编程》这本书,里面讲的非常全。这里主要是介绍标准I/O函数,我们的目标是将套接字变成标准I/O使其拥有标准I/O的优点。标准I/O函数主要有以下优点:标准I/O函数具有良好的移植性标准.原创 2021-08-07 17:06:11 · 116 阅读 · 0 评论 -
十四、TCP IP网络编程之多播与广播
文章目录多播加入多播组设置TTL以及加入多播的方法测试程序广播如何设置广播测试程序这一章主要是IP地址相关的通信方式,多播可以跨网络通信,而广播只能在网内通信。多播之所以能实现跨网通信。多播多播的传输方式采用UDP实现,与UDP的服务端、客户端之间的实现方式相近,区别在于UDP数据传输以单一对象进行数据通信,而多播数据同时传递到加入(注册)特定组的大量主机。换言之,可以同时向多个主机传递数据。多播是采用D类的IP地址(224.0.0.0~239.255.255.255),而加入“多播组”可以原创 2021-08-06 15:32:52 · 505 阅读 · 0 评论 -
十三、Linux网络编程中的多种IO函数
Linux网络编程之多种I/O函数注:本章所讲的所有函数都是基于Linux环境。send & recv 函数函数原型俩函数是一对,因此需要一起介绍,我们要把生产者-消费者模型去理解send()与recv()函数功能,每次recv()缓冲区就会减少数据。直至为空#include<sys/socket.h>ssize_t send(int sockfd, const void* buf, size_t nbytes, int flags);/*sockfd: 表示与数据传原创 2021-08-04 17:05:47 · 112 阅读 · 0 评论 -
十二、IO复用
文章目录select函数select 函数测试程序实现I/O复用服务器采用多进程固然能很好的实现业务分离,但是开辟一个新进程需要的资源太多,而且一些简单的业务本不需要开辟一个新进程进行处理,因此出现严重的资源浪费,能不能有一种技术不仅仅能替代多进程的移步分离处理多客户端情况,而且会造成太大的资源浪费。于是I/O技术就被提出来了,I/O复用关键在于掌握select函数的使用。本章主要任务是采用I/O改写之前的基于多进程回声服务端设计,使得能够在同时处理多个客户端之前的数据交换select函数关于该原创 2021-08-02 22:13:40 · 48 阅读 · 0 评论 -
多进程+管道+信号量+网络编程实践
文章目录实验要求实验技术代码实践编译运行实验要求在我们第十章的基于多进程回声服务器的基础上添加一个功能:服务端将所有来自客户端的数据保存到一个文件当中。实验技术多进程技术信号处理技术Linux环境网络编程技术管道代码实践服务端#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>#include <signal.h>原创 2021-07-31 21:39:46 · 104 阅读 · 0 评论 -
十、多进程服务器端
文章目录一、相关操作函数1. 创建进程函数2. 防止出现僵尸进程的函数3. 信号处理函数二、基于多任务的并发服务器1. 基于进程的并发服务器模型2. 代码实现3. 通过fork函数复制文件描述符三、基于多进程的客户端读写分离1. 代码实现至于什么是多进程,这里不展开叙述,可以去查阅相关技术资料,在本章中使用到的技术有:多线程编程以及信号处理,如果对这些技术不太熟悉可以自行查看相关资料。这里只介绍几个操作函数一、相关操作函数1. 创建进程函数#include<unistd.h>pid原创 2021-07-31 11:17:52 · 139 阅读 · 0 评论 -
九、套接字的多种可选项
文章目录控制I/O缓冲大小的可选项1. 选项的操作函数2. 设置缓冲区大小9.2 SO_REUSEADDR1. Time-wait状态2. 为什么需要Time-wait状态?9.3 TCP_NODELAY1. Nagle算法控制I/O缓冲大小的可选项1. 选项的操作函数具体的套接字选项,这里不好展开,可以自行去查,主要介绍选项的操作函数getsocketopt(获取选项参数的函数)&&setsocketopt(设置选项参数的函数)//getsocketopt#include&l原创 2021-07-29 09:20:11 · 289 阅读 · 0 评论 -
(第七章)优雅地断开套接字连接
七、TCP半关闭套接字开启过程很简单,基本不会出现太大问题;但是在关闭套接字过程当中会出现各种意想不到的情况发生。因此需要单独说一下TCP套接字的关闭。文章目录七、TCP半关闭7.1 单方面断开连接的问题7.2 针对优雅断开的shutdown函数7.3 为什么需要半关闭7.4 基于半关闭的文件传输程序7.1 单方面断开连接的问题在Linux系统当中调用close()关闭套接字意味着完全断开连接,如下图所示在主机A给B发完信息之后,随即调用close()进行断开连接,此时主机B收到A的信息之原创 2021-07-27 17:37:13 · 671 阅读 · 0 评论 -
(第六章)基于UDP的服务器端客户端
文章目录一、理解UDP1.1 UDP套接字特点1.2 UDP内部工作原理二、实现基于UDP的服务器端/客户端2.1 操作函数2.2 基于UDP的回声服务器服务端/客户端2.3 UDP客户端套接字地址的分配三、UDP的数据传输特性和调用connect函数3.1 UDP存在数据边界验证3.2 已连接UDP套接字与未连接UDP套接字3.3 创建已连接UDP套接字一、理解UDP1.1 UDP套接字特点 UDP工作原理就跟寄信一样,写上收信地址以及收信人然后贴上邮票就可以发送了,发送完之后就不管有没有发送到即原创 2021-07-20 11:38:30 · 425 阅读 · 0 评论 -
基于TCP的服务器端、客户端(下)
基于TCP的服务器端、客户端(下)这一章是在上一章的基础上写的,如果没看过,请移步基于TCP的服务器端、客户端(上),通过这一章你会更加理解为什么网络编程里面需要许多协议,以及明白各种协议的使用是为了解决各种特殊的问题,回声测试就是一个很好的说明例子。注意本文所有代码测试环境是在Linux系统下,而非windows文章目录基于TCP的服务器端、客户端(下)一、回声测试问题解决1.1 检查问题1.2 客户端解决方法1.3 高阶解决方法1.4 计算机服务端、客户端实例二、TCP原理2.1 TCP套接字原创 2021-07-16 16:04:53 · 123 阅读 · 2 评论 -
基于TCP的服务器端、客户端(上)
基于TCP的服务器端、客户端(上)根据数据传输方式的不同,基于网络协议的套接字一般分为TCP套接字和UDP套接字,本节主要是TCP(面向连接的套接字)。一、TCP在网络结构当中的位置五层网络模型:对比我们发现,TCP与UDP是工作在五层网络模型中的运输层,各层的主要作用如下:(这里只是简略描述,具体还需自行查阅相关技术资料)链路层(以下关于 链路层解释来源于CSDN博主)成帧:链路层把从网络层(IP层)的数据封装成帧链路接入:规定了帧在链路上传输的规则差错检错:规定如果帧出错怎么办原创 2021-07-03 17:32:24 · 146 阅读 · 2 评论 -
地址族与数据序列
地址族与数据序列分配给套接字的IP地址与端口号IP为了接发网络数据而分配给计算机的值IP地址分为IPv6和IPv4地址,我们主要以IPv4为例。端口号为了区分程序中创建的套接字而分配给套接字的序号一、地址信息的表示回顾我们之前讲的bind函数#include<sys/socket.h>int bind(int sockfd,struct sockaddr* myaddr,socklen_t addrlen);//bind函数的作用在于将套接字和IP+端口原创 2021-06-30 21:31:09 · 97 阅读 · 2 评论 -
协议与套接字类型
协议与套接字类型文章目录协议与套接字类型协议概念理解套接字创建套接字协议族(Protocol Family)套接字类型(Type)面向连接的套接字(SOCK_STREAM)面向消息的套接字(SOCK_DGRAM)实例本章主要讲的是套接字类型以及简单的协议协议概念理解计算机网络当中有各种各样的协议,每种协议都是为了解决特定问题而出现的。例如,相隔很远的两个人进行通信,如果一方采用电话,则另外一方也必须采用电话而非书信。因此采用电话进行通信就是两个人进行通信的协议。协议的具体内容可以去参照其他解答,原创 2021-06-07 12:02:54 · 172 阅读 · 1 评论 -
计算机网络编程-基础篇01
理解网络编程和套接字基础在计算机网络当中,我们需要进行以下步骤进行网络通信:构建套接字#include<sys/socket.h>int socket(int domain,int type,int protocol);//成功则返回文件描述符,失败返回-1调用bind函数给套接字分配本机地址#incude<sys/socket.h>int bind(int sockfd,struct sockaddr *myaddr,socklen_t addrlen);原创 2021-06-04 16:22:43 · 76 阅读 · 1 评论