Java演示TCP 3次握手与 4次分手
来源:互联网 发布:淘宝童装男孩 编辑:程序博客网 时间:2024/06/06 08:50
啥都不说,先上代码。
服务端:
package com.ghs.test;import java.io.IOException;import java.net.ServerSocket;import java.net.Socket;public class TCPServerSocket { private static ServerSocket serverSocket; private static Socket socket; public static void startServerSocket(int bindPort) { try { serverSocket = new ServerSocket(bindPort); while(true){ socket = serverSocket.accept(); System.out.println("连接的客户端地址和端口为:" + socket.getRemoteSocketAddress()); socket.close(); } } catch (IOException e) { e.printStackTrace(); } } public static void main(String[] args) { startServerSocket(6000); }}
客户端:
package com.ghs.test;import java.io.IOException;import java.net.Socket;import java.net.UnknownHostException;public class TCPClientSocket { private static Socket socket; /** * 是否主动发起关闭 */ private static boolean isLaunchClose=true; /** * 建立socket连接 * * @param bindIp * @param bindPort */ public static void connectServerSocket(String bindIp, int bindPort) { try { socket = new Socket(bindIp, bindPort); } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } /** * 关闭socket连接 */ public static void closeSocket(){ try { socket.close(); } catch (IOException e) { e.printStackTrace(); } } public static void main(String[] args) { int bindPort = 6000; String bindIp = "192.168.1.36"; connectServerSocket(bindIp, bindPort); if(!isLaunchClose){ try { Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } } closeSocket(); }}
先启动服务端,然后启动客户端,通过wireshark软件进行抓包。结果如下
注:实际操作过程中,抓取的包可能是下面这样,不过红色部分可以不加
考虑
附:如果你本地无法抓包,请参考
https://yq.aliyun.com/ziliao/140472
下面,简单的介绍一下,TCP的3次握手和4次分手。
先上一个经典图形。
3次握手
当服务的启动之后,处于LISTEN状态。
当客户端执行下面的代码后,就开始了3次握手
socket = new Socket(bindIp, bindPort)
客户端首先发送一个SYN报文,服务端返回一个SYN+ACK报文,客户端再回一个ACK报文
4次分手
当客户端执行下面的代码后
socket.close();
客户端会发送一个FIN+ACK报文,服务端会响应一个ACK报文。
此时,客户端处于FIN_WAIT_2状态,服务端处于CLOSE_WAIT状态。
当服务端执行下面的代码后
socket.close();
服务端会发送一个FIN报文,进入LAST_ACK状态
客户端返回一个ACK报文,进入TIME_WAIT状态
至于TCP为什么要经过3个握手4次分手,可以参考下面这篇博文。
http://www.jellythink.com/archives/705
0 0
- Java演示TCP 3次握手与 4次分手
- tcp/ip 3次握手与4次分手
- TCP/IP_3次握手4次分手
- Tcp/ip三次握手,4次分手.
- TCP为什么需要3次握手与4次挥手
- TCP为何需要3次握手与4次挥手
- TCP为什么需要3次握手与4次挥手
- TCP为什么需要3次握手与4次挥手
- TCP为什么需要3次握手与4次挥手
- TCP为什么需要3次握手与4次挥手
- TCP为什么需要3次握手与4次挥手
- TCP为什么需要3次握手与4次挥手
- TCP为什么需要3次握手与4次挥手
- TCP为什么需要3次握手与4次挥手
- TCP为什么需要3次握手与4次挥手
- TCP : 3次握手与4次挥手
- TCP为什么需要3次握手与4次挥手
- TCP为什么需要3次握手与4次挥手
- java对象创建(内存模型)过程详解
- 回头再看
- OpenCV学习----深入理解双边滤波器实现
- HFUTOJ problem 1344实现总结
- Spring--AOP
- Java演示TCP 3次握手与 4次分手
- 再探win32绘制正弦图像的另一种方法:指定映射模式
- JFinal与websocket整合
- Vue入门
- Android严苛模式StrictMode使用详解
- archlinux 升级系统时遇到 “ca-certificates-utils: 文件系统中已存在 /etc/ssl/certs/ca-certificates.crt ”解决方案
- 路径中 斜杠/和反斜杠\ 的区别
- string和stringBuilder和stringBuffer的区别
- 非root用户搭建hadoop伪分布式