java socket 握手_TCP建立连接三次握手过程详解(wireshark截图、java socket源码)
TCP(Transmission Control Protocol传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。
三次握手协议建立连接图
握手过程步骤如下(配wireshark分析图):
1、客户端发送SYN(SEQ=1022)报文给服务器端,客户端进入SYN_SEND状态。
2、服务器端收到SYN报文,回应一个SYN (SEQ=2032)ACK(ACK=1022+1)报文,服务器段进入SYN_RECV状态。
注意:服务器根据syn=1判断客户端请求建立连接,返回ack=1
3、客户端收到服务器端的SYN报文,回应一个ACK(ACK=2032+1)报文,进入Established状态。
注意:确认ack number是否与第一次发送(seq number+1)相等,并ack=1。正确,发送ack number = seq number(服务器顺序编号)+1
服务器端:确认ack number是否与第一次发送(seq number+1)相等,并ack=1。正确,连接建立。
连接建立完成,可以传送数据了。
java测试源码(只有握手部分)
服务器代码:
package com.wangshihai.util;import java.io.IOException;import java.net.InetAddress;import java.net.ServerSocket;import java.net.Socket;/** * * @ClassName: TCPServerSocket* @Description: TODO(tcp server socket类型)* @author 技术杂货铺 wangshihai.com* @date 2015年7月25日 上午8:49:54* */public class TCPServerSocket {private static ServerSocket serverSocket;private static Socket socket;/** * * @Title: startServerSocket * @Description: TODO(根据端口,绑定本机地址,建立serversocket) * @param @param bindPort 绑定端口* @param @param bindIp 绑定地址* @param @param blocknumber 允许客户端连接的个数 * @return void 返回类型 * @throws */public static void startServerSocket(int bindPort,String bindIp,int blocknumer){try {serverSocket = new ServerSocket(bindPort,blocknumer,InetAddress.getByName(bindIp));socket = serverSocket.accept();System.out.println('连接的客户端地址和端口为:'+socket.getRemoteSocketAddress());} catch (IOException e) {e.printStackTrace();}}/** * * @Title: main * @Description: TODO(测试防范) * @param @param args 设定文件 * @return void 返回类型 * @throws */public static void main(String[] args) {startServerSocket(6000,'192.168.2.100',3);}}
客户端代码:
package com.wangshihai.util;import java.io.IOException;import java.net.InetAddress;import java.net.Socket;import java.net.UnknownHostException;/** * * @ClassName: TCPClientSocket* @Description: TODO(连接server socket 工具类)* @author 技术杂货铺 wangshihai.com* @date 2015年7月25日 上午9:17:33* */public class TCPClientSocket {private static Socket socket;/** * * @Title: connectServerSocket * @Description: TODO(根据服务器的IP和端口,建立socket连接) * @param @param bindPort 访问的服务器端口 * @return void 返回类型 * @throws */public static void connectServerSocket(int bindPort){InetAddress inetAddress;try {//根据字符串IP获取inetaddress对象inetAddress = InetAddress.getByName('192.168.2.100');socket = new Socket(inetAddress, bindPort);} catch (UnknownHostException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}/** * * @Title: main * @Description: TODO(测试方法) * @param @param args 设定文件 * @return void 返回类型 * @throws */public static void main(String[] args) {int bindPort = 6000;connectServerSocket( bindPort);}}
java socket 握手_TCP建立连接三次握手过程详解(wireshark截图、java socket源码)相关推荐
- TCP建立连接三次握手和释放连接四次握手
TCP建立连接三次握手和释放连接四次握手 [尊重原创,转载请注明出处]http://blog.csdn.net/guyuealian/article/details/52535294 在谈及T ...
- Java单机部署,Nacos docker单机模式部署实现过程详解
Nacos 的部署,我使用的时docker 部署(单机模式 mysql),官网文档:https://nacos.io/zh-cn/docs/quick-start-docker.html 拉取代码: ...
- TCP建立连接三次握手及其断开过程
TCP是一个面向连接的服务,也就是在数据通信之前,发送端需要建立连接.等数据发送之后,就要断开连接. 1. TCP建立连接 TCP建立连接需要三次握手.建立的过程如下: 2. TCP断开连接 转载于: ...
- java tomcat源码_详解Tomcat系列(一)-从源码分析Tomcat的启动
在整个Tomcat系列文章讲解之前, 我想说的是虽然整个Tomcat体系比较复杂, 但是Tomcat中的代码并不难读, 只要认真花点功夫, 一定能啃下来. 由于篇幅的原因, 很难把Tomcat所有的知 ...
- 【Java入门提高篇】Day26 Java容器类详解(八)HashSet源码分析
前面花了好几篇的篇幅把HashMap里里外外说了个遍,大家可能对于源码分析篇已经讳莫如深了.别慌别慌,这一篇来说说集合框架里最偷懒的一个家伙--HashSet,为什么说它是最偷懒的呢,先留个悬念,看完 ...
- java toast_详解Android中的Toast源码
Toast源码实现 Toast入口 我们在应用中使用Toast提示的时候,一般都是一行简单的代码调用,如下所示: [java] view plaincopyprint?在CODE上查看代码片派生 ...
- Java虚拟机(JVM)之类的加载过程详解
java程序在对某个类进行引用.使用时,就会开始对该类进行加载,比如直接使用类加载器进行显式加载.创建该类的对象.使用该类的类变量等情况.类的加载是通过java虚拟机的类加载子系统完成的.类的加载主要 ...
- java赛马游戏_Java小程序赛马游戏实现过程详解
这是当时做的一个小游戏,大概就是程序开始后,会进入用户登录界面,用户输入自己的姓名和密码后,选择登录会进入到赛马比赛的界面,这时可以看见赛马场和马匹的编号,用户可以选择任何一个编号的马进行投注,输入有 ...
- java模拟交通信号灯_java 多线程交通信号灯模拟过程详解
这学期我们java课程的课程设计项目----交通信号灯的线程设计 实验目的:多线程设计,同步机制 题意 设计一个交通信号灯类: 变量:位置.颜色(红.黄.绿).显示时间(秒). 方法:切换信号灯. 创 ...
最新文章
- Typescript 精彩履历
- docker-compose 1.29.2 下载地址
- Build Tour 2017 中国站北京、上海报名了
- Linux怎么更新镜像,利用 Zsync 更新已有的 Ubuntu ISO 镜像
- Unity3D 装备系统学习Inventory Pro 2.1.2 基础篇
- java笔记:自己动手写javaEE框架(七)--使用JSON和Ajax技术
- python关机linux_Python学习第157课——Linux切换用户、关机、查看正在运行的程序...
- Linux内核漏洞精准检测如何做?SCA工具不能只在软件层面
- docker stop
- java10 WeakHashMap
- macvlan 详解
- Ubuntu下camshift算法进行目标跟踪
- triu matlab,matlab triu
- HorizontalScrollView+recyclerView
- 无线AP与无线路由的区别
- 现货白银如何计算盈亏
- ALLOCATE语句分配FORTRAN动态数组方法
- Linux 参数之 max_map_count
- MySQL 单个数据库备份还原
- 托管配置文件格式不正确 error: unsupported rule type RULE-SET
热门文章
- 知乎热议!学完 Python 之后,我的编程能力竟然退化了!
- 《2019年数据及存储发展研究报告》十大洞察
- “数”有专攻、智“汇”武汉,周末技术沙龙Call你来!
- 13 岁编程!少年比尔·盖茨如何成为最成功的自学成才程序员?
- 1024程序员节:除了高薪,你还有什么理由坚持做程序员?
- 2018 年程序员求生欲测试题(全国卷)
- 6 月 4 日!苹果 WWDC 2018 或重点推出 iOS 12 系统
- day09【后台】权限控制-下
- safari 浏览器提示添加到主屏幕_Safari浏览器的几个小技巧你掌握了吗?
- mysql避免死锁的方法