UNP学习第四章tcp】的更多相关文章

一.TCP简单流程图 因为对于server我已经写过一篇笔记了:http://www.cnblogs.com/ch122633/p/8315883.html 所以我想再补充一些对于client的部分的笔记.和fork相关的总结. 二.connect函数: #include <sys/socket.h> int connect(int sockfd, const struct sockaddr *servaddr, socklen_t addrlen); 返回:0成功,-1出错sockfd:套接…
第四章 异常处理   时间:2017年4月26日11:16:39~2017年4月26日11:28:58 章节:04章_01节 04章_02节 视频长度:20:46+01:16 内容:异常的概念 心得: Java异常是JAVA提供的用于处理程序中错误的一种机制 实在运行的过程中发生的一些异常事件(比如除0溢出,数组越界,要读取的文件不存在) 设计良好的程序应该在异常发生时提供处理这些错误的方法,使得程序不会因为异常的发生而阻断或产生不可预见的结果   JAVA程序的执行过程中 如果出现异常事件,可…
第四章 继承 1,继承的类型 实现继承: 一个类派生于一个基类型,拥有该基类型所有成员字段和函数. 接口继承 一个类型只继承了函数的签名,没有继承任何实现代码.   2,实现继承 class MyDerivedClass:MyBaseClass,IInterface1,IInterface2 { } public struct MyderivedStruct:IInterface1, IInterface2 { } 类只能继承一个基类,但可以继承多个接口 结构不能继承结构,但是结构能够继承接口…
一.描述符就绪条件 对于引起select返回套接字“就绪”的条件我们必须讨论得更明确: (1)满足一下塞个条件中的仍和一个时,一个套接字准备好读. a)该套接字接收缓冲区中的数据字节数不大于等于套接字接收缓冲区低水位标记的当前大小.相关SO_RCVLOWAT默认值为1 b)该连接的读半部关闭(也就接收了FIN的TCP连接).对这样的套接字读操作将不阻塞并返回0(返回EOF) c)该套接字是一个监听套接字且已完成的连接数不为0(accept不阻塞) d)其上有一个套接字错误待处理. (2)下列四个…
一.POSIX信号处理 信号:告知某进程发生了某个事件的通知(软中断),通常是异步的. 信号可以:由进程发给另一个进程,由内核发给某个进程. 设置信号处理办法,有三个选择: 1.写一个函数,在信号发生时立即调用.不过SIGKILL和SIGSTOP不能被捕获. 有些信号如SIGIO.SIGPOLL和SIGURG. 2.设置信号处理办法为SIG_IGN来忽略,SIGKILL和SIGSTOP不能忽略 3.设置信号处理办法为SIG_DFL来设置缺省处理. #include <signal.h> sig…
一.概述 想要写一个完整的TCP客户-服务器程序例子,有下面功能的回射服务器 1.客户从标准输入读一行文本,写到服务器上: 2.服务器从网络输入读此行,并回射给客户: 3.客户读此回射行并写到标准输出. 此例子需要观察:正常运行时什么情况,客户和服务器都启动时什么情况,客户正常终止时什么情况, 如果服务器在客户之前终止客户什么情况,如果服务器主机崩溃则客户什么情况. 二.TCP回射服务器程序:main函数 #include "unp.h" int main(int argc, char…
参考https://github.com/chenyuntc/pytorch-book/tree/v1.0 希望大家直接到上面的网址去查看代码,下面是本人的笔记 本章介绍的nn模块是构建与autograd之上的神经网络模块 除了nn外还会介绍神经网络中常用的工具,比如优化器optim.初始化init等 1.nn.Module torch的核心数据结构是Module,它是一个抽象的概念,既可以表示神经网络中的某个层,也可以表示一个包含很多层的神经网络 在实际使用中,最常见的做法是继承nn.Modu…
来到了TCP的最后一个章节,未来与性能.在当时(1991年)的未来,如今已经部分变为现实,部分就只是历史中的实验. 主要内容: 路径MTU的发现与TCP的结合. 长肥管道 和 高速千兆比网络. 窗口扩大选项. 时间戳选项 和 PAWS算法. T/TCP. TCP的性能. 24.1 前言 本章讨论TCP的一些修改建议,这些建议 可以使TCP在高速率环境中获得最大的吞吐量.使用路径MTU发现机制可以增加吞吐量. 长肥管道:带宽时延乘积很大的网络.以及TCP在这些网络上面的局限性.为了处理长肥管道,增…
1 套接字地址结构 大多数套接字函数都需要一个指向套接字地址结构的指针作为参数.每个协议族都定义了自己的套接字结构.这些套接字的结构以sockaddr_开头,以每个协议族唯一的后缀名结尾. 1.1 IPV4套接字地址结构 IPV4套接字结构通常被称为网际套接字结构,以sockaddr_in命名,定义在<netinet/in.h>头文件中. struct sockaddr_in { uint8_t sin_len; //数据结构长度(16) sa_family_t sin_family; //A…
现在大多数项目都是基于spring boot进行开发,所以我们以spring boot作为开发框架来使用netty.使用spring boot的一个好处就是能给将netty的业务拆分出来,并通过spring cloud整合到项目中. 我们以一个简单的客户端发送消息到服务的场景编写一个实例. 一.服务端模块 netty中服务端一般分为两个类,一个是启动配置类,另一个是消息的逻辑处理类,但是首先我们要配置spring boot的启动类,启动netty @SpringBootApplication p…
在了解JDK提供的线程原子性操作工具类之前,我们应该先知道什么是原子性:在多线程并发的条件下,对于变量的操作是线程安全的,不会受到其他线程的干扰.接下来我们就学习JDK中线程的原子性操作. 一.CAS原理 说道原子性,不得不提的就是CAS原理: 使用锁时,线程获取锁是一种悲观锁策略,即假设每一次执行临界区代码都会产生冲突,所以当前线程获取到锁的时候同时也会阻塞其他线程获取该锁.而CAS操作(又称为无锁操作)是一种乐观锁策略,它假设所有线程访问共享资源的时候不会出现冲突,既然不会出现冲突自然而然就…
Unix系统中的syslogd守护进程通常由某个系统初始化脚本启动,而且在系统工作期间一直运行. 源自Berkeley的syslogd实现在启动时执行以下步骤. (1)读取配置文件.通常为/etc/syslog.conf的配置文件指定本守护进程可能收取的各种日志消息,应该如何处理. (2)创建一个Unix域数据报套接字,给它捆绑路径名/var/run/log (3)创建一个UDP套接字,给它捆绑端口514. (4)打开路径名/dev/klog. 一.syslog函数 #include <sysl…
一.套接口选项 函数getsockopt和setsockopt 函数fcntl 函数ioctl 二.getsockopt和setsockopt函数 #include <sys/socket.h> int getsockopt(int sockfd, int level, int optname, void *optval, socklen_t *optlen); int setsockopt(int sockfd, int level, int optname, const void *opt…
一.I/O复用典型的网络应用场合 当客户处理多个描述字时,必须使用I/O复用,这在前一段中已做了描述. 一个客户同时处理多个套接口时可能的,但很少出现. 如果一个TCP服务器既要处理监听套接口,又要处理已连接套接口,一般也要用到I/O复用. 如果一个服务器即要处理TCP,又要处理UDP. 如果一个服务器要处理多个服务或者多个协议. 二.I/O模型 一个输入操作一般有两个不同的阶段: 1.等待数据准备好 2.从内核到进程拷贝数据 五个I/O模型基本区别: 阻塞I/O 此系统调用直到数据报到达切拷贝…
一.主机字节序和网络字节序 转换时用到下列四个函数: #include <netinet/in.h> uint16_t htons(uint16_t host16bitvalue); uint32_t htonl(uint32_t host32bitvalue); 均返回:网络字节序值 uint16_t ntohs(uint6_t net16bitvalue); uint32_t ntohl(uint32_t net32bitvalue); 均返回:主机字节序值 h代表host,n代表netw…
4.3  和数据相关的操作符和伪指令 操作符和伪指令并非机器可执行的指令,相反,它们是由汇编器进行解释的.开发者可以使用一系列的MASM操作符或伪指令获取数据的地址以及大小等特征信息: OFFSET操作符返回一个变量相对于其所在段开始的偏移. PTR 操作符允许重载变量的默认尺寸. TYPE操作符返回数组中每个元素的大小(以字节计算). LENGTHOF操作符返回数组内元素的数目. SIZEOF操作符返回数组初始化时占用的字节数. 除此之外,LABEL伪指令还提供了对同一变量重新定义不同尺寸属性…
链接来自:http://blog.csdn.net/ysu108/article/details/7764461 这个问题在前面有的部分已经涉及,这里在重新总结下.主要参考UNIX网络编程. (1)数据报大小 IPv4的数据报最大大小是65535字节,包括IPv4首部.因为首部中说明大小的字段为16位. IPv6的数据报最大大小是65575字节,包括40字节的IPv6首部.同样是展16位,但是IPv6首部大小不算在里面,所以总大小比IPv4大一个首部(40字节). (2)MTU 许多网络有一个可…
今天学习C语言循环结构,为什么要用循环呢?因为有时候我们对一堆的数字进行重复的处理的时候要重复的编写一些相同或者差不多的代码,让程序显得很臃肿,而且写着也麻烦,如果用循环来写的话能简化很多,出错的话也更容易查找,程序也更一目了然. 那么循环要怎么来用呢?又该在哪里开始用呢?首先我们要知道循环主要有三种: while循环,do-while循环和for循环. while循环:先判断条件是否成立,如果条件成立将执行其下的循环体,如果条件不成立就不执行,要注意while循环有可能一次都不执行哦. 语法:…
4.2 未考虑TCP粘包导致功能异常案例 如果代码没有考虑粘包/拆包问题,往往会出现解码错位或者错误,导致程序不能正常工作. 4.2.1 TimeServer 的改造 Class : TimeServer package com.phei.netty.chap4; import io.netty.bootstrap.ServerBootstrap; import io.netty.channel.ChannelFuture; import io.netty.channel.ChannelInit…
4.1 TCP粘包/拆包 TCP是一个“流”协议,所谓流,就是没有界限的一串数据.TCP底层并不了解上层业务数据的具体含义,它会根据TCP缓冲区的实际情况进行包的划分,所以在业务上认为,一个完整的包可能会被TCP拆分成多个包进行发送,也有可能把多个小的包封装成一个大的数据包发送,这就是所谓的TCP粘包和拆包问题. 4.1.1 TCP粘包/拆包问题说明 4.1.2 TCP粘包/拆包发生的原因 问题产生的原因有三个,分别如下: ⑴ 应用程序write写入的字节大小大于套接口发送缓冲区大小: ⑵ 进行…
总结: 第一Model元数据是针对 数据类型的一种表述信息. 第二Model元数据作用:控制数据类型本身及其成员,通过相应的特性,在view中 为绑定的数据(Model)实现模版化的html呈现. 第三ModelMetadata 对象表示model元数据具有一个树形的层次结构 第四关于view层数据展示分两种: 1.HtmlHelper 和HtmlHelper<TModel>定义了一系列模版方法,例如:Display/DisPlayFor,Editor/EditorFor 等等(p128),调…
学习目的: 掌握MySQL数据库的安装 正式步骤 Step1:安装数据库 百度MySQL,下载软件 端口设置 设置密码,我的密码123456 下一步 下一步 查看MySQL服务器是否启动 PS:未申明的步骤为默认,选择自定义安装是因为不想默认安装在C盘系统盘,时间久了以后,系统越来越慢,主要原因还是因为我C盘太小了 Step2:安装MySQL可视化客户端 百度下载MySQL-Front 指定路径后安装 连接MYSQL数据库 学习总结: MySQL的卸载需要删除干净本地所有的目录,以及隐藏目录C:…
Instruction set Y86 指令集 运算符:addl, subl, andl, and xorl 跳转符:jmp,jle,jl,je,jne,jge, andjg 条件符:cmovle, cmovl, cmove, cmovne, cmovge,cmovg 其它:call , pushl,popl, halt Registers %eax, %ecx, %edx, %ebx, %esi, %edi, %esp, %ebp 当中栈指针存在%esp PC存放当前指令的地址 Conditi…
1.类和对象: 类对象支持两种操作:属性引用和实例化. 属性引用:obj.name 构造方法:类会定义一个名为__int__()的特殊方法如下 def  __init__(self):       self.data=[] 类定义了__init__()方法的话,类的实例化操作会自动调用__init__()的方法.如下所示: X=Class() 当然,__init__()方法可以有参数,参数通过__init__()传递到类的实例化操作上.如下所示: class All:     def __ini…
// Playground - noun: a place where people can play import UIKit var age=100 //假设年龄不大于50的就会在这里断言,和之前的OC一样的 assert(age>50,"age must >50") //能够用a..b标识a到b之间的范围, //我们循环打印五次hello World var helloWorld="hello world" for i in 0..5 { //这个…
转载地址:http://ask.android-studio.org/?/article/16 4.1. Prerequisites 前提条件Gradle requires a Java JDK or JRE to be installed, version 6 or higher (to check, use java -version). Gradle ships with its own Groovy library, therefore Groovy does not need to b…
注:因为有了父项目,所以不需要引入boot的jar,项目都是maven构建 1.pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLoca…
字符串与格式化输入/输出 函数 strlen() 关键字 const 利用#define 和 const创建符号常量 #include <stdio.h> #include <string.h> #define DENSITY 62.4 int main() { float weight,volume; int size,letters; ]; printf("hi , what's your first name \n"); scanf("%s&qu…
4.4 字符数据的输入输出 putchar:函数的作用是想终端输出一个字符 putchar(c) getchar:函数的作用是从输入设备获取一个字符 getchar(c) 4.5 格式输入与输出 printf:格式输出函数 printf("控制格式",输出列表) scanf:格式输入函数 scanf("格式控制",地址表列) d     %d 按十进制整型数据的实际长度输出 %md m指定输出字段的宽度,左端补空格,超出按实际输出 o %o 八进制输出 x %x 十…
我们接着承接上篇继续讲下去 : 第三章 Nacos Discovery–服务治理,开始第四篇的学习 第四章 Sentinel–服务容错 4.1 高并发带来的问题 在微服务架构中,我们将业务拆分成一个个的服务,服务与服务之间可以相互调用,但是由于网络原因或者自身的原因,服务并不能保证服务的100%可用,如果单个服务出现问题,调用这个服务就会出现网络延迟,此时若有大量的网络涌入,会形成任务堆积,最终导致服务瘫痪. 接下来,我们来模拟一个高并发的场景 @RestController @Slf4j pu…