socket系列之客户端socket——Socket类
假设TCP套接字服务器端已经建立好并正在监听客户端的连接了,那么客户端就可以通过Socket类来发起连接。客户端发起一个连接请求后,就被动地在等待服务器的响应。这个类同样位于java.net包中,包含很多方法用于建立连接,操作数据流等。客户端按以下几步进行工作:
① 创建一个Socket实例,构造函数直接指定远程服务器IP跟端口,建立一个TCP连接。
② 通过这个Socket实例的输入输出流进行通信,Socket实例都包含一个InputStream对象和OutputStream对象,通过操作这些流就可以实现接收发送数据。
③ 完成通信后,用Socket实例的close()方法关闭连接。
上面了解了应用层java的工作方式,接着有必要深入研究socket从应用层到系统底层是怎么工作的,应用层的这些操作在系统底层是怎么反应的。如图2-3-2-3所示,以虚线为分界线,上层位应用层,下层为系统底层。整个工作流程可以分为以下几步:
(1) 首先确定要进行通信的目标,包括目标IP和目标端口。
(2) 根据目标IP跟端口,在Java应用层创建一个Socket实例。
(3) 阻塞等待,准备进行系统底层相关工作。
(4) 创建socket底层数据结构,socket初始状态为关闭。
(5) 向这个socket填入本地、远程的地址跟端口,并向远程服务器发送连接请求,此时socket的状态为正在连接。
(6) 跟远程服务器完成3次握手后,就完成了连接的建立,此时的socket状态为连接建立完成。
(7) 完成应用层上的socket实例化,接下去可以对这个socket进行操作,以实现通信。
图2-3-2-3 Socket底层工作原理
实际的通信中,客户端socket中虽然没有明显指定用哪个本地端口号,但其实系统会随机(一般大于1023)分配一个端口号,所以每次通信使用的本地端口号一般是不同的。另外,由于消息在网络中传输可能延迟,而如果关闭服务器客户端socket连接后,又产生同样地址的服务器跟客户端socket,这时在网络中延迟的旧消息会被误以为是新连接的消息发送给新的socket连接,导致错误。所以要TCP规范要求两端都完成关闭握手后,至少要有一个套接字保持一段时间Time-Wait状态。一般客户端的socket完成通信后会变为Time-Wait状态,并保持一段时间。在此期间,不允许socket使用这个本地端口号,应用层Java如果试图用该端口号创建一个新的socket实例,将抛出IOException异常。
喜欢研究java的同学可以交个朋友,下面是本人的微信号:
socket系列之客户端socket——Socket类的更多相关文章
- socket系列之什么是socket
1.什么是socket Socket是应用层与TCP/IP协议族通信的中间抽象层,它是一组接口,应用层通过调用这些接口实现发送和接收数据.一般这种抽象层由操作系统提供或者由JVM自己实现.使用sock ...
- Socket网络编程(TCP/IP/端口/类)和实例
Socket网络编程(TCP/IP/端口/类)和实例 原文:C# Socket网络编程精华篇 转自:微冷的雨 我们在讲解Socket编程前,先看几个和Socket编程紧密相关的概念: TCP/IP层次 ...
- Ajax跨域问题及解决方案 asp.net core 系列之允许跨越访问(Enable Cross-Origin Requests:CORS) c#中的Cache缓存技术 C#中的Cookie C#串口扫描枪的简单实现 c#Socket服务器与客户端的开发(2)
Ajax跨域问题及解决方案 目录 复现Ajax跨域问题 Ajax跨域介绍 Ajax跨域解决方案 一. 在服务端添加响应头Access-Control-Allow-Origin 二. 使用JSONP ...
- socket系列之服务器端socket——ServerSocket类
一般地,Socket可分为TCP套接字和UDP套接字,再进一步,还可以被分为服务器端套接字跟客户端套接字.这节我们先关注TCP套接字的服务器端socket,Java中ServerSocket类与之相对 ...
- C# Socket系列二 简单的创建 socket 通信
看了系列一 我们开启了对socket tcp的监听状态,那么这一章我们来讲解怎么创建socket的通信代码 我新建一个类 TSocketBase public abstract class TSock ...
- C#网络编程系列文章(五)之Socket实现异步UDPserver
原创性声明 本文作者:小竹zz 本文地址http://blog.csdn.net/zhujunxxxxx/article/details/44258719 转载请注明出处 文章系列文件夹 C#网络编程 ...
- C#网络编程系列文章(一)之Socket实现异步TCPserver
原创性声明 本文作者:小竹zz 本文地址http://blog.csdn.net/zhujunxxxxx/article/details/44258719 转载请注明出处 文章系列文件夹 C#网络编程 ...
- Socket聊天程序——客户端
写在前面: 上周末抽点时间把自己写的一个简单Socket聊天程序的初始设计和服务端细化设计记录了一下,周二终于等来毕业前考的软考证书,然后接下来就是在加班的日子度过了,今天正好周五,打算把客户端的详细 ...
- Socket实现聊天客户端
今天在极客学院上看到了一个关于Socket的视频讲解,感觉还不错,就写了份代码,拿来分享一下. Socket使用方法 关于Socket的使用,我们首先要弄清楚的是,在服务器端还是在客户端使用.因为这的 ...
随机推荐
- POJ 3233 (矩阵)
题意:对于矩阵A,求A^1 + ...... + A^k 按照矩阵十大经典题的思路大致做了下. 在k为奇数时: A^( k / 2+1)+ 1) * (A^1 + ....... A^(k/2)) ...
- Spring学习笔记6——注解方式测试
需要下载junit-4.12.jar和hamcrest-all-1.3.jar,将下载好的包导入到项目当中. 修改TestSpring, 并运行1. @RunWith(SpringJUnit4Clas ...
- sharepoint环境安装
SharePoint 2013 测试环境安装配置指南 软件版本 Windows Server 2012 标准版 SQL Server 2012 标准版 SharePoint Server 2013 企 ...
- (概念)多个CPU和多核CPU以及超线程(Hyper-Threading)
引言 在这篇文章中我会主要介绍CPU相关的一些重要概念和技术.如果你想更好地了解操作系统,那就从本文开始吧. 中央处理器(Central processing unit) 在我们了解其它概念之前,我们 ...
- input text focus去掉默认光影
input:focus { outline:none; }
- Windows上安装scapy
1. 环境: (1) 操作系统:win7 .server2012 (2) Python版本:Python3.6-64bit (3) 依赖模块Npcap(推荐) 或WinPcap. ps:从logo ...
- 螺旋打印2D数组
//一破题付出血的代价 多思考!public static void offer(int [][]a){ ,right=a.length-,low=,high=a[].length-; while(l ...
- Nginx+tomcat配置集群负载均衡
开发的应用采用F5负载均衡交换机,F5将请求转发给5台hp unix服务器,每台服务器有多个webserver实例,对外提供web服务和socket等接口服务.之初,曾有个小小的疑问为何不采用开源的a ...
- Linux的管理类命令及其使用方法
文件操作相关有一些命令可以帮助我们"修剪"之前看到的文件树. $touch a.txt 如果a.txt不存在,生成一个新的空文档a.txt.如果a.txt存在,那么只更改该文档的时 ...
- CI数据库操作_查询构造器类
=================数据库操作======================1.数据库配置: config/database.php 用户名 密码 数据库 2 加载数据库类:$this-& ...