客户端服务器

Java 之 TCP 通信程序

一笑奈何 提交于 2020-02-14 00:22:43
一、TCP协议概述   TCP(Transmission Control Protocol,传输控制协议)被称作一种端对端协议。是一种面向连接的、可靠的、基于字节流的传输层的通信协议,可以连续传输大量的数据。   这是因为它为当一台计算机需要与另一台远程计算机连接时,TCP协议会采用“三次握手”方式让它们建立一个连接,用于发送和接收数据的虚拟链路。数据传输完毕TCP协议会采用“四次挥手”方式断开连接。   TCP协议负责收集这些信息包,并将其按适当的次序放好传送,在接收端收到后再将其正确的还原。TCP协议保证了数据包在传送中准确无误。TCP协议使用重发机制,当一个通信实体发送一个消息给另一个通信实体后,需要收到另一个通信实体确认信息,如果没有收到另一个通信实体确认信息,则会再次重复刚才发送的消息。   TCP 通信能实现两台计算机之间的数据交互,通信的两端,要严格区分为客户端(Client)与服务端(Server)。   两端通信时步骤:      1、服务端程序,需要事先启动,等待客户端的连接;     2、客户端主动连接服务器端,连接成功才能通信。服务端不可以主动连接客户端。   在 Java 中,提供了两个类用于实现 TCP 通信程序:      1、 客户端 :java.net.Socket 类表示。创建 Socket 对象,向服务端发出连接请求,服务器响应请求

TCP/UDP协议

本秂侑毒 提交于 2020-02-14 00:17:20
文章目录 1.OSI网络七层模型 1.1各层的主要功能 低三层 承上启下作用层 高三层 2.传输控制协议TCP 2.1 TCP握手机制 2.1.1三次握手过程 Ⅰ.为什么需要三次握手,两次不行吗? Ⅱ.什么是半连接队列? Ⅲ.ISN(Initial Sequence Number)是固定的吗? Ⅳ:三次握手过程中可以携带数据吗? Ⅴ. SYN攻击是什么? 2.1.2 四次挥手过程 Ⅰ. 挥手为什么需要四次? Ⅱ.四次挥手释放连接时,等待2MSL的意义? Ⅲ.为什么TIME_WAIT状态需要经过2MSL才能返回到CLOSE状态? 3.用户数据报协议 UDP 3.1开发应用人员在UDP上构建应用时关注的点 3.2 UDP和TCP比较 3.3什么情况下会用到UDP? 4.Socket编程 1.OSI网络七层模型 为使不同计算机厂商的计算机能够互相通信,以便在更大的范围内建立计算机网络,有必要建立一个国际范围的网络体系结构标准。 分层的目的:为了让每一层的开发人员、系统设计不需要再关心整个的网络层次。比如说做网线或者光纤的厂商,只需要关心物理层就行。 1.1各层的主要功能 低三层 物理层:使原始的数据比特流能在物理介质上传输。 数据链路层:通过校验、确认、和反馈重发等手段,形成稳定的数据链路(01010101)。 网络层:进行路由选择和流量控制。(IP协议) 承上启下作用层 传输层

win32下的socket编程

被刻印的时光 ゝ 提交于 2020-02-12 07:21:51
// socket.cpp : 定义控制台应用程序的入口点。 // //服务器端 //SOCKET连接过程   //根据连接启动的方式以及本地套接字要连接的目标,套接字之间的连接过程可以分为三个步骤:服务器监听,客户端请求,连接确认。    //服务器监听:是服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态。   //客户端请求:是指由客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。 //为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向服务器端套接字提出连接请求。    //连接确认:是指当服务器端套接字监听到或者说接收到客户端套接字的连接请求,它就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客户端,一旦客户端确认了此描述,连接就建立好了。 //而服务器端套接字继续处于监听状态,继续接收其他客户端套接字的连接请求。 //如何开发一个Server-Client模型的程序 //开发原理:    //服务器,使用ServerSocket监听指定的端口,端口可以随意指定(由于1024以下的端口通常属于保留端口,在一些操作系统中不可以随意使用,所以建议使用大于1024的端口),等待客户连接请求,客户连接后,会话产生;在完成会话后,关闭连接。   // 客户端

TCP的三次握手与四次挥手理解及面试题

牧云@^-^@ 提交于 2020-02-11 21:39:38
ACK、SYN和FIN这些大写的单词表示标志位,其值要么是1,要么是0;ack、seq小写的单词表示序号(是数字)。 标志位: 确认ACK:占1位;ACK=1时,确认号字段数字有效;ACK=0时,确认号字段数字无效。 同步SYN:建立连接时用于同步序号。当SYN=1 ACK=0时表示:这是一个连接请求报文。若同意连接,则在响应报文段中使得SYN=1 ACK=1。因此,SYN=1表示这是一个连接请求报文,或连接接受报文。SYN这个标志位只有在TCP建立连接时才会被置1,握手完成后SYN被置零。 终止FIN:用来释放一个连接。FIN=1表示此报文段发送方的数据已经发送完毕,并要求释放运输连接。 两种序列号: 序列号seq:占4个字节,用来标记数据段的顺序(是标记同一个报文里不同数据字节的顺序,不同报文之间的顺序还没弄明白),TCP把连接中发送的所有数据字节都编上一个序号,第一个字节的编号由本地随机产生(意思是每个报文的第一个数据字节的编号都是重新随机生成的);给字节编上序号后,就给每一个报文段指派一个序号;序列号seq就是这个报文段中的第一个字节的数据编号。 确认号ack:占4个字节,期待收到对方下一个报文段的第一个数据字节的序号;序列号表示报文段携带数据的第一个字节的编号;而确认号指的是期望接收到下一个字节的编号;因此当前报文段最后一个字节的编号+1即为确认号。 x和y

Session机制详解

天涯浪子 提交于 2020-02-11 20:06:59
Session机制详解 虽然session机制在web应用程序中被采用已经很长时间了,但是仍然有很多人不清楚session机制的本质,以至不能正确的应用这一技术。本文将详细讨论session的工作机制并且对在Java web application中应用session机制时常见的问题作出解答。 一、术语session 在我的经验里,session这个词被滥用的程度大概仅次于transaction,更加有趣的是transaction与session在某些语境下的含义是相同的。 session,中文经常翻译为会话,其本来的含义是指有始有终的一系列动作/消息,比如打电话时从拿起电话拨号到挂断电话这中间的一系列过程可以称之为一个session。有时候我们可以看到这样的话“在一个浏览器会话期间,...”,这里的会话一词用的就是其本义,是指从 一个浏览器窗口打开到关闭这个期间 ①。最混乱的是“用户(客户端)在一次会话期间”这样一句话,它可能指用户的一系列动作(一般情况下是同某个具体目的相关的一系列动作,比如从登录到选购商品到结账登出这样一个网上购物的过程,有时候也被称为一个transaction),然而有时候 也可能仅仅是指一次连接 ,也有可能是指含义①,其中的差别只能靠上下文来推断②。 然而当session一词与网络协议相关联时,它又往往隐含了“ 面向连接”和/或“保持状态”这样两个含义 ,

FTP协议的主动模式和被动模式的区别

生来就可爱ヽ(ⅴ<●) 提交于 2020-02-10 20:45:26
最近准备做一个《 FtpCopy系列教程 》,主要讲解Ftp协议主动模式和被动模式的区别、以及FTP服务器的安装部署,然后通过几个常用实例演示,详细讲解如何使用FtpCopy进行数据自动备份。 什么是FTP协议? FTP的中文名称是“文件传输协议”,是File Transfer Protocol三个英文单词的缩写。FTP协议是TCP/IP协议组中的协议之一,其传输效率非常高,在网络上传输大的文件时,经常采用该协议。 一个完整的FTP由 FTP服务器 和 FTP客户端 组成,客户端可以将服务器上的文件通过FTP协议下载到本地,也可以将本地数据通过FTP协议上传到服务器上。 (1)服务器端需要安装FTP服务软件,常用的有FileZilla Server、IIS、Serv-U、OSSFTP等等。 不同的FTP软件对FTP协议标准支持有所差别,从我的使用经验感觉FileZilla Server是对FTP协议支持最好的软件,它具有以下几个特点:体积小(2M左右)、免费开源、操作简单、功能完善(我们所需要的有功能它基本都支持)。 IIS对FTP协议的支持也很不错。 Serv-U有几个命令支持不是很好,这个软件也是收费软件,没感觉比FileZilla Server好多少。 OSSFTP是阿里云对象存储提供的FTP Server,对FTP标准协议支持就更差了。 (2)FTP客户端软件就比较多了

Nginx简介及安装

ぐ巨炮叔叔 提交于 2020-02-10 19:41:09
一、Nginx简介 Nginx 【http://nginx.org/en/】(engine x) 是一个高性能的HTTP和反向代理服务器 Nginx是lgor Sysoev为俄罗斯访问量第二的rambler.ru站点设计开发的。从2004年发布至今,凭借开源的力量,已经接近成熟与完善。 Nginx功能丰富,可作为HTTP服务器,也可作为反向代理服务器,邮件服务器。支持FastCGI、SSL、Virtual Host、URL Rewrite、Gzip等功能。并且支持很多第三方的模块扩展。 Nginx的稳定性、功能集、示例配置文件和低系统资源的消耗让他后来居上,在全球活跃的网站中有12.18%的使用比率,大约为2220万个网站。 二、常用功能 1、Http服务、反向代理 Http服务作为web服务器最常用的功能之一,尤其是反向代理。 Nginx在做反向代理时,提供性能稳定,并且能够提供配置灵活的转发功能。Nginx可以根据不同的正则匹配,采取不同的转发策略,比如图片文件结尾的走文件服务器,动态页面走web服务器,只要你正则写的没问题,又有相对应的服务器解决方案,你就可以随心所欲的玩。并且Nginx对返回结果进行错误页跳转,异常判断等。如果被分发的服务器存在异常,他可以将请求重新转发给另外一台服务器,然后自动去除异常服务器。 2、负载均衡 Nginx提供的负载均衡策略有2种

RHEL7.2下DHCP服务器的搭建

て烟熏妆下的殇ゞ 提交于 2020-02-10 05:37:10
DHCP(?Dynamic Host Configuration Protocol)是一种帮助计算机从指定的DHCP服务器获取配置信息的自举协议 请求配置信息的计算机叫做DHCP客户端,而提供信息的叫做DHCP服务器 DHCP服务端除了动态态分配IP地址,还为客户端提供其他的配置信息,如子网掩码,从而使得客户端无需动手即 可自动配置并链接网络 查找安装包 安装服务 安装成功 编辑 dhcpd.conf文件 将/usr/share/doc/dhcp*/dhcpd.conf.example的内容复制到 /etc/dhcp/dhcpd.conf 打开 dhcp.conf 找到第7和第8行 做如下修改 删除27-28行的内容 删除后 在31行:subnet 172.25.254.0? netmask 255.255.255.0 { ?32行地址池 :range 172.25.254.200? 172.25.254.220; ?33行网关? :option routers 172.25.254.62; ?} 将34行以后的内容全部删除 编辑完成 退出保存 开启服务 systemctl start dhcpd systemctl enable dhcpd 在主机重置server虚拟机 打开server查看ip ip在预先设定的范围内,服务器搭建成功! 查看看服务器的mac地址?cat /var

netty核心组件开发

家住魔仙堡 提交于 2020-02-09 20:42:54
1)下载Netty包: Project Structure-->Modules-->Dependencies-->右边的+--Library-->From Maven-->io.netty:netty-all:4.1.20.Final(勾选Download Sources JavaDocs) 2)在Dependencies中勾选下载好的netty库 3)在工程的lib下发现了包,分为3类: class(开发用的类) javadoc sources(源码文件): 里面还有个example目录,有很多例子 4)服务器启动流程: (1)初始化 EventLoopGroup BossGroup(老板线程) EventLoopGroup WorkerGroup(工作线程) (2)初始化助手(链式操作): ServerBootStrap bootstrap 1:group 设置2个线程组 2:channel 设置NioSocketChannel作为通道的实现 3:option 设置线程队列得到的连接个数 4:childOption 设置保持活动连接状态 5:childHandler 给我们的WorkerGroup的EventLoop对应的管道设置处理器: 现有的 自己自定义的 sync: 绑定一个端口并且同步,生成一个ChannelFuture对象,立即返回 // 启动服务器了,并且绑定了端口

服务器有新消息主动推送给客户端浏览器

自闭症网瘾萝莉.ら 提交于 2020-02-09 18:18:00
前言 通常情况下,无论是web浏览器还是移动app,我们与服务器之间的交互都是主动的,客户端向服务器端发出请求,然后服务器端返回数据给客户端,客户端浏览器再将信息呈现,客户端与服务端对应的模式是: 客户端请求--服务端响应,这种机制对于信息变化不是特别频繁的应用尚可,但对于实时要求高、海量并发的应用来说显得捉襟见肘,尤其在当前业界移动互联网蓬勃发展的趋势下,高并发与用户实时响应是 Web 应用经常面临的问题,比如金融证券的实时信息,Web 导航应用中的地理位置获取,社交网络的实时消息推送,新闻的订阅,天气的提醒等。这些情况下,需要服务器主动推送消息给客户端。 那么在这样的模式下,会有几个问题需要我们思考下: 1.应用服务器如何确定每一个应用所在的设备 2.服务器端是如何将消息推送到客户端的,客户端又不像服务器有一个固定的地址 带着这些疑问我们来研究一下目前有哪些技术可以解决该问题: 一、Ajax轮询 所谓的Ajax轮询,其实就是定时的通过Ajax查询服务端,客户端按规定时间定时像服务端发送ajax请求,服务器接到请求后马上返回响应信息并关闭连接。 这种技术方式实现起来非常简单,但是这种方式会有非常严重的问题,就是需要不断的向服务器发送消息询问,这种方式会对服务器造成极大的性能浪费。 还有一个类似的轮询是使用JSONP跨域请求的方式轮询,在实现起来有差别,但基本原理都是相同的