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的工作步骤,并且从应用层往系统底层剖析其运作原理,我们清楚了他们各自的一块,现在我们将把他们结合起来,看看他们是如何通信的,并详细讨论一下他们之 ...
随机推荐
- [ZJOI2016]小星星
题目描述 小Y是一个心灵手巧的女孩子,她喜欢手工制作一些小饰品.她有n颗小星星,用m条彩色的细线串了起来,每条细线连着两颗小星星. 有一天她发现,她的饰品被破坏了,很多细线都被拆掉了.这个饰品只剩下了 ...
- Passward
问题 A: Passward 时间限制: 1 Sec 内存限制: 512 MB 题目描述 你来到了一个庙前,庙牌上有一个仅包含小写字母的字符串 s. 传说打开庙门的密码是这个字符串的一个子串 t,并 ...
- 【HNOI2016】序列 莫队+单调栈+RMQ
Description 给定长度为n的序列:a1,a2,…,an,记为a[1:n].类似地,a[l:r](1≤l≤r≤N)是指序列:al,al+1,…,ar-1,ar.若1≤l≤s≤t≤r≤n,则称a ...
- hdu 5317 合数分解+预处理
RGCDQ Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submi ...
- 【bzoj4569 scoi2016】萌萌哒
题目描述 一个长度为n的大数,用S1S2S3...Sn表示,其中Si表示数的第i位,S1是数的最高位,告诉你一些限制条件,每个条件表示为四个数,l1,r1,l2,r2,即两个长度相同的区间,表示子串S ...
- 【Codeforces Round #430 (Div. 2) A C D三个题】
·不论难度,A,C,D自己都有收获! [A. Kirill And The Game] ·全是英文题,述大意: 给出两组区间端点:l,r,x,y和一个k.(都是正整数,保证区间不为空),询问是否 ...
- 左偏树(BZOJ4003)
左偏树打个标记,没了. #include <cstdio> #include <vector> using namespace std; typedef long long l ...
- C++ 实参和形参
形参:在函数没有调用的时候,函数的形参并不占据实际的内存空间,也没有实质的值,--正如字面意思那样,"形式"参数,只是一个"形式. 实参:当函数被调用的时候,系统会为形式 ...
- Python中模块之logging & subprocess的讲解
subprocess & logging模块的介绍 1. subprocess 该模块替代了os.system & os.pawn*所实现的功能. 2. logging 1. 日志五大 ...
- C语言程序设计第三次作业——选择结构(一)
(一)改错题 错误信息: 错误原因:y=1/x后没加分号 改正方法:在其后加上分号 错误信息: 错误原因:if语句后接了:,使else语句找不到对应的if 改正方法:删掉if后的分号 错误信息: 错误 ...