socket系列之服务器端socket——ServerSocket类
一般地,Socket可分为TCP套接字和UDP套接字,再进一步,还可以被分为服务器端套接字跟客户端套接字。这节我们先关注TCP套接字的服务器端socket,Java中ServerSocket类与之相对应,这个类主要用于如何在服务器端创建一个套接字服务,建立一个通信终端,被动地等待客户端的连接,一旦有数据进入被监听的端口,这个类将能接收这些数据。
ServerSocket类位于java.net包中,它有很多方法,包括创建socket实例、绑定端口,阻塞接收连接等。一般服务器按以下几步进行工作:
① 建一个ServerSocket实例,绑定监听指定的本地端口,这样服务器套接字就能接收指定端口的连接。
② ServerSocket实例调用accept()方法进行阻塞,获取下一个客户端连接,如果有客户端连接则创建一个socket并返回。
③ 对②返回的socket进行处理,一般使用socket实例的InputStream对象跟OutputStream对象与客户端进行通信。
④ 通信完后,使用socket的close方法关闭客户端套接字连接。
⑤ 循环执行②到④,不断接收下一个客户端连接。
Serversocket到底是如何进行工作的?底层究竟是怎么运作的?应用层的操作是怎样反应到系统底层的?图2-3-2-2试图说明ServerSocket的工作原理。以虚线分割,上层为应用层,下层为系统底层。整个流程可以分为以下几步:
(1)利用ServerSocket的构造函数创建一个ServerSocket实例,传入端口号,即是监听的端口号。
(2)接着ServerSocket实例会进行阻塞操作,初始化底层socket并将进行监听。
(3)创建socket底层数据结构,这个socket初始状态为关闭。
(4)填入应用层传入的端口号并且设置socket状态为监听状态。
(5)服务器端开始监听客户端的访问。
(6)客户端访问时经过三次握手完成连接,准备接收socket连接。
(7)为该连接创建一个新的套接字数据结构,根据到来的分组报文设置远程端口跟远程IP。由于是完成了三次握手了,所以把状态设置为连接建立。
(8)建立好连接的底层套接字数据结构会被放到一个队列缓冲区,供应用层读取。
(9)Serversocket实例调用accept()方法后,即开始轮询上面的队列缓冲区,一旦队列中有新的连接,则马上创建并返回一个应用层的socket实例。
(10)如此进行工作,等待客户端的访问,直到Serversocket实例关闭。
图2-3-2-2 ServerSocket底层工作原理
由此看来,创建一个Serversocket实例,其实就是创建一个socket,并向TCP/IP协议栈声明对某一端口的占有,同时监听此端口, 在系统Socket层会将所有发往此端口的数据包缓存到一个区域,而Serversocket的accept()方法其实就是不断获取缓存区域的socket,在应用层表现为每当有一个连接,就能获取一个socket。
socket系列之服务器端socket——ServerSocket类的更多相关文章
- socket系列之客户端socket——Socket类
假设TCP套接字服务器端已经建立好并正在监听客户端的连接了,那么客户端就可以通过Socket类来发起连接.客户端发起一个连接请求后,就被动地在等待服务器的响应.这个类同样位于java.net包中,包含 ...
- java网络编程ServerSocket类 和Socket类的常用构造方法及其方法
Socket类Socket(InetAddress address, int port) 创建一个流套接字并将其连接到指定 IP 地址的指定端口号.Socket(String host, int po ...
- Socket类 以及 ServerSocket类 讲解
Socket类 套接字是网络连接的端点,套接字使应用可以从网络中读取数据,可以向网络中写入数据.不同计算机上的两个应用程序可以通过连接发送或接收字节流,以此达到相互通信的目的. 为了从一个应用程序向另 ...
- 关于Socket和ServerSocket类详解
Socket类 套接字是网络连接的一个端点.套接字使得一个应用可以从网络中读取和写入数据.放在两个不同计算机上的两个应用可以通过连接发送和接受字节流.为了从你的应用发送一条信息到另一个应用,你需要知道 ...
- Socket学习总结系列(一) -- IM & Socket
写在准备动手的时候: Socket通讯在iOS中也是很常见,自己最近也一直在学习Telegram这个开源项目,Telegram就是在Socket的基础上做的即时通讯,这个相信了解这个开源项目的也都知道 ...
- C# Socket系列二 简单的创建 socket 通信
看了系列一 我们开启了对socket tcp的监听状态,那么这一章我们来讲解怎么创建socket的通信代码 我新建一个类 TSocketBase public abstract class TSock ...
- 浅谈android Socket 通信及自建ServerSocket服务端常见问题
摘 要:TCP/IP通信协议是可靠的面向连接的网络协议,它在通信两端各建立一个Socket,从而在两端形成网络虚拟链路,进而应用程序可通过可以通过虚拟链路进行通信.Java对于基于TCP协议的网络通 ...
- php socket通信演示以及socket操作类
准备做Java的课程设计,一个通讯录.采用C/S架构.客户端用java FX和Java,服务器端用php,采用socket通信. 下面来讲一讲php的socket通信: 讲之前,得先讲一下TCP/IP ...
- socket系列之socket服务端与客户端如何通信
上面已经分别介绍了ServerSocket跟Socket的工作步骤,并且从应用层往系统底层剖析其运作原理,我们清楚了他们各自的一块,现在我们将把他们结合起来,看看他们是如何通信的,并详细讨论一下他们之 ...
随机推荐
- ●Joyoi Easy
题链: http://www.joyoi.cn/problem/tyvj-1952题解: 概率dp (先做的BZOJ 4318: OSU![本人题解],然后就感觉这个题很简单了) 令p[i]表示第i个 ...
- ●HDU 3689 Infinite monkey theorem
题链: http://acm.hdu.edu.cn/showproblem.php?pid=3689题解: KMP,概率dp (字符串都从1位置开始) 首先对模式串S建立next数组. 定义dp[i] ...
- poj2828 BuyTickets 线段树
Buy Tickets Time Limit: 4000MS Memory Limit: 65536K Total Submissions: 17326 Accepted: 8601 Desc ...
- 凸包(BZOJ1069)
顶点一定在凸包上,我们枚举对角线,观察到固定一个点后,随着另一个点的增加,剩下两个点的最优位置一定是单调的,于是就得到了一个优秀的O(n^2)做法. #include <cstdio> # ...
- web项目部署到阿里云服务器步骤
http://www.cnblogs.com/qq3111901846/p/6178855.html http://blog.csdn.net/liona_koukou/article/details ...
- BI之SSIS入门最新版Visual Studio调试技巧
简介 最近公司业务需要用到BI SSIS,SSIS是什么?"SSIS是Microsoft SQL Server Integration Services的简称,是生成高性能数据集成解决方案( ...
- kindeditor配合requirejs使用时,ready失效
KindEditor官方的文档在使用KindEditor时是这样的: KindEditor.ready(function(K)) { K.create('#editor_id'); } 使用了自己提供 ...
- 浅析java内存管理机制
内存管理是计算机编程中的一个重要问题,一般来说,内存管理主要包括内存分配和内存回收两个部分.不同的编程语言有不同的内存管理机制,本文在对比C++和Java语言内存管理机制的不同的基础上,浅析java中 ...
- Vue实践经验
多考虑应变 如果模版中绑定了 obj.xx 时,需要注意 obj 是否是异步数据,默认值是否为 null.安全起见,可在组件最外层加 v-if 判断. <template> <div ...
- python笔记二(数据类型和变量、编码方式、字符串的编码、字符串的格式化)
一.数据类型 python可以直接处理的数据类型有:整数.浮点数.字符串.布尔值.空值. 整数 浮点数 字符串:双引号内嵌套单引号,可以输出 i'm ok. 也可以用\来实现,\n 换行 \t tab ...