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源码)相关推荐

  1. TCP建立连接三次握手和释放连接四次握手

    TCP建立连接三次握手和释放连接四次握手     [尊重原创,转载请注明出处]http://blog.csdn.net/guyuealian/article/details/52535294 在谈及T ...

  2. Java单机部署,Nacos docker单机模式部署实现过程详解

    Nacos 的部署,我使用的时docker 部署(单机模式 mysql),官网文档:https://nacos.io/zh-cn/docs/quick-start-docker.html 拉取代码: ...

  3. TCP建立连接三次握手及其断开过程

    TCP是一个面向连接的服务,也就是在数据通信之前,发送端需要建立连接.等数据发送之后,就要断开连接. 1. TCP建立连接 TCP建立连接需要三次握手.建立的过程如下: 2. TCP断开连接 转载于: ...

  4. java tomcat源码_详解Tomcat系列(一)-从源码分析Tomcat的启动

    在整个Tomcat系列文章讲解之前, 我想说的是虽然整个Tomcat体系比较复杂, 但是Tomcat中的代码并不难读, 只要认真花点功夫, 一定能啃下来. 由于篇幅的原因, 很难把Tomcat所有的知 ...

  5. 【Java入门提高篇】Day26 Java容器类详解(八)HashSet源码分析

    前面花了好几篇的篇幅把HashMap里里外外说了个遍,大家可能对于源码分析篇已经讳莫如深了.别慌别慌,这一篇来说说集合框架里最偷懒的一个家伙--HashSet,为什么说它是最偷懒的呢,先留个悬念,看完 ...

  6. java toast_详解Android中的Toast源码

    Toast源码实现 Toast入口    我们在应用中使用Toast提示的时候,一般都是一行简单的代码调用,如下所示: [java] view plaincopyprint?在CODE上查看代码片派生 ...

  7. Java虚拟机(JVM)之类的加载过程详解

    java程序在对某个类进行引用.使用时,就会开始对该类进行加载,比如直接使用类加载器进行显式加载.创建该类的对象.使用该类的类变量等情况.类的加载是通过java虚拟机的类加载子系统完成的.类的加载主要 ...

  8. java赛马游戏_Java小程序赛马游戏实现过程详解

    这是当时做的一个小游戏,大概就是程序开始后,会进入用户登录界面,用户输入自己的姓名和密码后,选择登录会进入到赛马比赛的界面,这时可以看见赛马场和马匹的编号,用户可以选择任何一个编号的马进行投注,输入有 ...

  9. java模拟交通信号灯_java 多线程交通信号灯模拟过程详解

    这学期我们java课程的课程设计项目----交通信号灯的线程设计 实验目的:多线程设计,同步机制 题意 设计一个交通信号灯类: 变量:位置.颜色(红.黄.绿).显示时间(秒). 方法:切换信号灯. 创 ...

最新文章

  1. Typescript 精彩履历
  2. docker-compose 1.29.2 下载地址
  3. Build Tour 2017 中国站北京、上海报名了
  4. Linux怎么更新镜像,利用 Zsync 更新已有的 Ubuntu ISO 镜像
  5. Unity3D 装备系统学习Inventory Pro 2.1.2 基础篇
  6. java笔记:自己动手写javaEE框架(七)--使用JSON和Ajax技术
  7. python关机linux_Python学习第157课——Linux切换用户、关机、查看正在运行的程序...
  8. Linux内核漏洞精准检测如何做?SCA工具不能只在软件层面
  9. docker stop
  10. java10 WeakHashMap
  11. macvlan 详解
  12. Ubuntu下camshift算法进行目标跟踪
  13. triu matlab,matlab triu
  14. HorizontalScrollView+recyclerView
  15. 无线AP与无线路由的区别
  16. 现货白银如何计算盈亏
  17. ALLOCATE语句分配FORTRAN动态数组方法
  18. Linux 参数之 max_map_count
  19. MySQL 单个数据库备份还原
  20. 托管配置文件格式不正确 error: unsupported rule type RULE-SET

热门文章

  1. 知乎热议!学完 Python 之后,我的编程能力竟然退化了!
  2. 《2019年数据及存储发展研究报告》十大洞察
  3. “数”有专攻、智“汇”武汉,周末技术沙龙Call你来!
  4. 13 岁编程!少年比尔·盖茨如何成为最成功的自学成才程序员?
  5. 1024程序员节:除了高薪,你还有什么理由坚持做程序员?
  6. 2018 年程序员求生欲测试题(全国卷)
  7. 6 月 4 日!苹果 WWDC 2018 或重点推出 iOS 12 系统
  8. day09【后台】权限控制-下
  9. safari 浏览器提示添加到主屏幕_Safari浏览器的几个小技巧你掌握了吗?
  10. mysql避免死锁的方法