socket

Spring MVC

生来就可爱ヽ(ⅴ<●) 提交于 2020-01-15 08:21:40
#手写一个Spring MVC框架 ##一次浏览器请求的大致过程 Sping MVC是一个Web框架,所以我们要了解Spring MVC就要先了解一次浏览器请求到收到服务器的响应大概发生了哪些事情。 1.域名解析; 2.请求连接(三次握手); 3.浏览器发起http请求; 4.服务器解析http交给Spring MVC处理; 5.将响应的结果封装返回; ##Socket编程 了解了这个过程之后开始做一个简单的Socket编程 首先服务端代码: public class Server { public static void main ( String [ ] args ) throws IOException { //1.建立服务端 ServerSocket serverSocket = new ServerSocket ( 8080 ) ; System . out . println ( "等待链接..." ) ; //2.监听客户端连接 Socket socket = serverSocket . accept ( ) ; System . out . println ( "客户端已连接:" + socket . getInetAddress ( ) . getHostAddress ( ) ) ; try ( BufferedReader in = new

【转】深入分析JAVA IO(BIO、NIO、AIO)

牧云@^-^@ 提交于 2020-01-15 08:03:49
IO的基本常识 1.同步 用户进程触发IO操作并等待或者轮询的去查看IO操作是否完成 2.异步 用户触发IO操作以后,可以干别的事,IO操作完成以后再通知当前线程继续处理 3.阻塞 当一个线程调用 read() 或 write()时,该线程被阻塞,直到有一些数据被读取或写入,该线程在此期间不能执行其他任务 4.非阻塞 当线程从某通道进行读写数据时,若没有数据可用时,该线程可以进行其他任务。线程通常将非阻塞 IO 的空闲时间用于在其他通道上执行 IO 操作,所以单独的线程可以管理多个输入和输出通道。 IO事件驱动模式 在IO读写时,把 IO请求 与 读写操作 分离调配进行,需要用到事件分离器。根据处理机制的不同,事件分离器又分为:同步的Reactor和异步的Proactor。 Reactor模型: - 应用程序在事件分离器注册 读就绪事件 和 读就绪事件处理器 - 事件分离器等待读就绪事件发生 - 读就绪事件发生,激活事件分离器,分离器调用 读就绪事件处理器(即:可以进行读操作了,开始读) - 读事件处理器开始进行读操作,把读到的数据提供给程序使用 Proactor模型: - 应用程序在事件分离器注册 读完成事件 和 读完成事件处理器,并向操作系统发出异步读请求 - 事件分离器等待操作系统完成读取 - 在分离器等待过程中,操作系统利用并行的内核线程执行实际的读操作

webSocket协议与Socket的区别

人盡茶涼 提交于 2020-01-15 07:39:30
WebSocket介绍与原理 WebSocket protocol 是HTML5一种新的协议。它实现了浏览器与服务器全双工通信(full-duplex)。一开始的握手需要借助HTTP请求完成。 ——百度百科 目的:即时通讯,替代轮询 网站上的即时通讯是很常见的,比如网页的QQ,聊天系统等。按照以往的技术能力通常是采用轮询、Comet技术解决。 HTTP协议是非持久化的,单向的网络协议,在建立连接后只允许浏览器向服务器发出请求后,服务器才能返回相应的数据。当需要即时通讯时,通过轮询在特定的时间间隔(如1秒),由浏览器向服务器发送Request请求,然后将最新的数据返回给浏览器。这样的方法最明显的缺点就是需要不断的发送请求,而且通常HTTP request的Header是非常长的,为了传输一个很小的数据 需要付出巨大的代价,是很不合算的,占用了很多的宽带。 缺点:会导致过多不必要的请求,浪费流量和服务器资源,每一次请求、应答,都浪费了一定流量在相同的头部信息上 然而WebSocket的出现可以弥补这一缺点。在WebSocket中,只需要服务器和浏览器通过HTTP协议进行一个握手的动作,然后单独建立一条TCP的通信通道进行数据的传送。 原理 WebSocket同HTTP一样也是应用层的协议,但是它是一种双向通信协议,是建立在TCP之上的。 连接过程 —— 握手过程 1. 浏览器

TCP三次握手四次挥手

旧巷老猫 提交于 2020-01-15 06:34:04
TCP三次握手四次挥手 标志位缩写 全称 中文 SYN synchronous 建立联机 ACK acknowledgement 确认 PSH push 传送 FIN finish 结束 RST reset 重置 URG urgent 紧急 Seq Sequence number 顺序号码 ACK Acknowledge number 确认号码 状态名称 意义 LISTEN 侦听来自远方TCP端口的连接请求 SYN-SENT 在发送连接请求后等待匹配的连接请求 SYN-RECEIVED 在收到和发送一个连接请求后等待对连接请求的确认 ESTABLISHED 代表一个打开的连接,数据可以传送给用户 FIN-WAIT-1 等待远程TCP的连接中断请求,或先前的连接中断请求的确认 FIN-WAIT-2 从远程TCP等待连接中断请求 CLOSE-WAIT 等待从本地用户发来的连接中断请求 CLOSING 等待远程TCP对连接中断的确认 LAST-ACK 等待原来发向远程TCP的连接中断请求的确认 TIME-WAIT 等待足够的时间以确保远程TCP接收到连接中断请求的确认 CLOSED 没有任何连接状态 【注意】 在TIME_WAIT状态中,如果TCP client端最后一次发送的ACK丢失了,它将重新发送。TIME_WAIT状态中所需要的时间是依赖于实现方法的。典型的值为30秒

TCP 三次握手 四次挥手

我怕爱的太早我们不能终老 提交于 2020-01-15 03:32:57
建立连接的三次握手以及四次挥手: MSL 是Maximum Segment Lifetime英文的缩写,中文可以译为“报文最大生存时间”,他是任何报文在网络上存在的最长时间,超过这个时间报文将被丢弃。因为tcp报文 (segment)是ip数据报(datagram)的数据部分,具体称谓请参见《数据在网络各层中的称呼》一文 TIME_WAIT 根据TCP协议定义的3次握手断开连接规定,发起socket主动关闭的一方 socket将进入TIME_WAIT状态。TIME_WAIT状态将持续2个MSL(Max Segment Lifetime),在Windows下默认为4分钟,即240秒。TIME_WAIT状态下的socket不能被回收使用. 具体现象是对于一个处理大量短连接的服务器,如果是由服务器主动关闭客户端的连接,将导致服务器端存在大量的处于TIME_WAIT状态的socket, 甚至比处于Established状态下的socket多的多,严重影响服务器的处理能力,甚至耗尽可用的socket,停止服务。 为什么需要TIME_WAIT?TIME_WAIT是TCP协议用以保证被重新分配的socket不会受到之前残留的延迟重发报文影响的机制,是必要的逻辑保证。 和TIME_WAIT状态有关的系统参数有一般由3个,本厂设置如下: net.ipv4.tcp_tw_recycle = 1 net

Linux-C网络编程

旧巷老猫 提交于 2020-01-15 00:13:56
简介 基础是TCP/IP协议,网上资料很多不再赘述。 推荐《图解TCP/IP》 socket编程 网络字节序 发送主机通常将发送缓冲区中的数据按内存地址从低到高的顺序发出, 接收主机把从网络上接到的字节依次保存在接收缓冲区中,也是按内存地址从低到高的顺序保存 因此,网络数据流的地址规定:先发出的数据是低地址,后发出的数据是高地址 TCP/IP协议规定,网络数据流应采用大端字节序,即低地址高字节。 例如UDP段格式,地址0-1是16位的源端口号,如果这个端口号是1000(0x3e8) 则地址0是0x03,地址1是0xe8,也就是先发0x03,再发0xe8 这16位在发送主机的缓冲区中也应该是低地址存0x03,高地址存0xe8。 但是,如果发送主机是小端字节序的,这16位被解释成0xe803,而不是1000。 因此,发送主机把1000填到发送缓冲区之前需要做字节序的转换。 同样地,接收主机如果是小端字节序的,接到16位的源端口号也要做字节序的转换。 如果主机是大端字节序的,发送和接收都不需要做转换。 同理,32位的IP地址也要考虑网络字节序和主机字节序的问题。 网络字节序转换 为使网络程序具有可移植性,使同样的C代码在大端和小端计算机上编译后都能正常运行 可以调用以下库函数做网络字节序和主机字节序的转换 #include <arpa/inet.h> uint32_t htonl

Linux学习之socket编程(一)

家住魔仙堡 提交于 2020-01-15 00:13:43
socket编程 socket的概念:     在TCP/IP协议中,“IP地址+TCP或UDP端口号”唯一标识网络通讯中的一个进程,“IP地址+端口号”就称为socket。   在TCP协议中,建立连接的两个进程各自有一个socket来标识,那么这两个socket组成的socket pair就唯一标识一个连接。socket本身有“插座”的意思,因此用来描述网络连 接的一对一关系。   TCP/IP协议最早在BSD UNIX上实现,为TCP/IP协议设计的应用层编程接口称为socketAPI。   本章的主要内容是socket API,主要介绍TCP协议的函数接口,最后介绍UDP协议和UNIXDomain Socket的函数接口。 socket socket-api 1.基础知识 网络字节序     我们已经知道,内存中的多字节数据相对于内存地址有大端和小端之分,磁盘文件中的多字节数据相对于文件中的偏移地址也有大端小端之分。网络数据流同样有大端小端之分,那么如何定义网络数据流的地址呢?发送主机通常将发送缓冲区中的数据按内存地址从低到高的顺序发出,接收主机把从网络上接到的字节依次保存在接收缓冲区中,也是按内存地址从低到高的顺序保存,因此,网络数据流的地址应这样规定:先发出的数据是低地址,后发出的数据是高地址。   TCP/IP协议规定,网络数据流应采用大端字节序,即低地址高字节

数据发送与接收并行

心已入冬 提交于 2020-01-14 22:06:46
服务端接收的socket可能有很多,会将这些客户端保存到一个集合中,当有输入的时候,遍历这些客户端进行发送。 当接收的时候,会只解析指定客户端的信息。 客户端: package client; import client.bean.ServerInfo; import java.io.IOException; public class Client { public static void main(String[] args){ ServerInfo info = ClientSearcher.searchServer(10000); System.out.println("Server:"+info); if(info != null){ try { TCPClient.linkWith(info); }catch (IOException e){ e.printStackTrace(); } } } } package client; import client.bean.ServerInfo; import clink.net.qiu.clink.utils.CloseUtils; import java.io.*; import java.net.*; public class TCPClient { public static void linkWith

goweb-web服务

吃可爱长大的小学妹 提交于 2020-01-14 18:50:37
Web服务 Web服务可以让你在HTTP协议的基础上通过XML或者JSON来交换信息。如果你想知道上海的天气预报、中国石油的股价或者淘宝商家的一个商品信息,你可以编写一段简短的代码,通过抓取这些信息然后通过标准的接口开放出来,就如同你调用一个本地函数并返回一个值。 Web服务背后的关键在于平台的无关性,你可以运行你的服务在Linux系统,可以与其他Windows的asp.net程序交互,同样的,也可以通过同一个接口和运行在FreeBSD上面的JSP无障碍地通信。 目前主流的有如下几种Web服务:REST、SOAP。 Socket编程 在很多底层网络应用开发者的眼里一切编程都是Socket,话虽然有点夸张,但却也几乎如此了,现在的网络编程几乎都是用Socket来编程。你想过这些情景么?我们每天打开浏览器浏览网页时,浏览器进程怎么和Web服务器进行通信的呢?当你用QQ聊天时,QQ进程怎么和服务器或者是你的好友所在的QQ进程进行通信的呢?当你打开PPstream观看视频时,PPstream进程如何与视频服务器进行通信的呢? 如此种种,都是靠Socket来进行通信的,以一斑窥全豹,可见Socket编程在现代编程中占据了多么重要的地位,这一节我们将介绍Go语言中如何进行Socket编程。 什么是Socket? Socket起源于Unix,而Unix基本哲学之一就是“一切皆文件”,都可以用

scoket

♀尐吖头ヾ 提交于 2020-01-14 11:59:43
Socket网络编程 什么是Socket   Socket就是为网络服务提供的一种机制。   通讯的两端都有 Sokcet   网络通讯其实就是 Sokcet间的通讯   数据在两个 Sokcet间通过IO传输。 TCP/IP   要想理解socket首先得熟悉一下TCP/IP协议族, TCP/IP( Transmission Control Protocol/Internet Protocol)即传输控制协议 /网间协议,定义了主机如何连入因特网及数据如何再它们之间传输的标准,   从字面意思来看TCP/IP是TCP和IP协议的合称,但实际上TCP/IP协议是指因特网整个TCP/IP协议族。不同于ISO模型的七个分层,TCP/IP协议参考模型把所有的TCP/IP系列协议归类到四个抽象层中   应用层:TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet 等等   传输层:TCP,UDP   网络层:IP,ICMP,OSPF,EIGRP,IGMP   数据链路层:SLIP,CSLIP,PPP,MTU   每一抽象层建立在低一层提供的服务上,并且为高一层提供服务,看起来大概是这样子的 IP地址与域名     在现实生活中,如果要打电话则需要知道对应人的电话号码,如果要寄信则需要知道收信人的地址。在网络中也是这样,需要知道一个设备的位置,则需要使用该设备的 IP地址