Tcp三次握手/Tcp协议数据传输(服务器端开启多线程)
Tcp协议是比udp协议更安全,是面向连接的协议,需要进行三次握手,因此不会造成丢包的情况。
接下来我们看看TCP协议的三次握手:
这三次握手就相当于一次访问的电话:
第一次握手:客户端电话给服务端问,你在家吗?
第二次握手:服务端受到客户端的电话,恢复到我在家。
第三次握手:客户端在恢复服务端,我一会来玩。
这就相当于TCP协议的三次握手。
接下俩我们来看看TCP协议的数据传输。
客户端:
public class TcpClient {public static void main(String[] args) throws IOException {while (true){System.out.println("请输入发送给服务器端的数据:");Scanner sc = new Scanner(System.in);String context = sc.nextLine();if (context.equals("12345")){break;}Socket socket = new Socket("127.0.0.1",8080);OutputStream outputStream = socket.getOutputStream();outputStream.write(context.getBytes(StandardCharsets.UTF_8));InputStream inputStream = socket.getInputStream();byte[] bytes = new byte[1024];int len = inputStream.read();System.out.println("客户端接收到服务器端的响应数据:"+new String(bytes,0,len));outputStream.close();socket.close();}}
}
服务端:(多线程)
public class TcpServer {public static void main(String[] args) throws IOException {ServerSocket serverSocket = new ServerSocket(8080);System.out.println("服务器端启动成功!");while (true){Socket socket = serverSocket.accept();new Thread(new Runnable() {@Overridepublic void run() {try {InputStream inputStream = socket.getInputStream();byte[] bytes = new byte[1024];int len = inputStream.read(bytes);System.out.println("服务器端读取到的数据:"+new String(bytes,0,len));OutputStream outputStream = socket.getOutputStream();String resp="我收到了,"+ UUID.randomUUID().toString();outputStream.write(resp.getBytes(StandardCharsets.UTF_8));inputStream.close();socket.close();}catch (Exception e){}}}).start();}}
}
采用了输入输出流来进行数据的传输。
从以上代码可以看出,每次客户端发送出数据都要接收响应服务区,而服务器端都要返回一个随机的数给客户端表示我已经收到了。此外,当开启多个客户端的时候,我们也不用担心服务器端在处理第一个客户端发来的数据,因为服务器端开启了多线程,可以接收多个客户端发来的数据。
注:以上代码是学习蚂蚁课堂架构师-余胜军的课程总结的笔记,感兴趣的小伙伴可以去看看!
Tcp三次握手/Tcp协议数据传输(服务器端开启多线程)相关推荐
- 网络协议-网络分层、TCP/UDP、TCP三次握手和四次挥手
网络的五层划分是什么? 应用层,常见协议:HTTP.FTP 传输层,常见协议:TCP.UDP 网络层,常见协议:IP 链路层 物理层 TCP 和 UDP 的区别是什么 TCP/UDP 都属于传输层的协 ...
- TCP三次握手和四次挥手的解释
基础知识 在TCP层,有个FLAGS字段,这个字段有以下几个标识:SYN, FIN, ACK, PSH, RST, URG. 其中,对于我们日常的分析有用的就是前面的五个字段. 它们的含义是: SYN ...
- 【Linux云计算架构:第三阶段-Linux高级运维架构】第26章——tcp三次握手四次挥手及在局域网中使用 awl伪装MAC地址进行多线程SYN攻击
25.1 tcp三次握手及tcp连接状态(含tcpdum抓包分析) 25.2 tcp四次挥手及tcp连接状态 25.3 实战:在局域网中使用 awl伪装MAC地址进行多线程SYN攻击 ssh 客户端: ...
- TCP三次握手与四次挥手(详解)
TCP三次握手 一:引出 客户端与服务器之间数据的发送和返回的过程当中需要创建一个叫TCP connection的东西:由于TCP不存在连接的概念,只存在请求和响应,请求和响应都是数据包,它们之间都是 ...
- 跟着动画学习 TCP 三次握手和四次挥手
TCP三次握手和四次挥手的问题在面试中是最为常见的考点之一.很多读者都知道三次和四次,但是如果问深入一点,他们往往都无法作出准确回答. 本篇尝试使用动画来对这个知识点进行讲解,期望读者们可以更加简单地 ...
- 【转】跟着动画来学习TCP三次握手和四次挥手
最近看到一篇很通俗易懂的描述TCP三次握手和四次挥手概念的文章,觉得特别好,怕以后找不到了,特意转载在这里学习一下. 原文地址:跟着动画来学习TCP三次握手和四次挥手 作者:老錢 链接:https:/ ...
- wireshark抓包图解 TCP三次握手/四次挥手详解
一. TCP/IP协议族 TCP/IP是一个协议族,通常分不同层次进行开发,每个层次负责不同的通信功能.包含以下四个层次: 1. 链路层,也称作数据链路层或者网络接口层,通常包括操作系统中的设备驱动程 ...
- TCP三次握手之-awl工具-SYN洪水攻击
文章目录 云盾数据 TCP三次握手 TCP报文段的头部格式 实战-使用tcpdump 抓包 tcpdump 常用参数 tcpdmp 抓包 awl -syn-洪水攻击 原理 实战 总结: 云盾数据 - ...
- TCP三次握手,四次挥手详解
本文是对小林的图解网络的总结 TCP简介 TCP作为一个传输层协议,是一个面向连接的字节流,为应用层提供端到端的传输服务.和UDP不同的是,TCP提供的是可靠的面向连接传输服务,并且提供了流量控制等功 ...
最新文章
- linux-关机与重启命令
- 微网站|h5弹窗|手机网站 html5 弹窗、弹层、提示框、加载条
- Deep learning:三十四(用NN实现数据的降维)
- java url 传值乱码问题_java 页面url传值中文乱码问题解决
- [USACO DEC13] 虫洞
- ImageJ 插入插件和基本教程
- java 流水账号生成器_Java之流水号生成器(示例代码)
- html 空格怎么打,空白空格怎么打?
- 【Android破解笔记】割绳子2内购
- 神经网络各种评判指标
- 迅雷某页面存在sql注入漏洞
- 总结:机器学习中的基本数学知识
- HTML: 点击链接时在新窗口打开
- 用墨刀进行简单的后台页面设计
- MATLAB colorbar颜色红黄绿,Matlab获取colorbar颜色并转换为需要的CPT文件
- 高通平台启动log概述(PBL log、sbl1 log、kernel log)
- oracle删除字段速度,oracle删除字段
- 声网 Agora 本地服务端录制 SDK v3.0 版正式上线
- 电商项目实战--用户相关
- Windows死机代码翻译大全
热门文章
- 知识点13--认识K8s
- win7计算机搜索记录,如何在win7中清空电脑的搜索记录?
- [转载]裸写一个含内嵌IE控件的窗口
- java哪些超类_java – 超类常用方法实现
- Java+SWT实现播放器
- wireshark 抓包 出现 SSL Continuation Data
- python量化缠论买卖点_缠论K线图-笔-线段自动生成(17.6.22持续更新....)(迭代处理最后一段笔)让你更清晰看清买卖点...
- 性能测试Locust--(7)使用更快的HTTP client提高Locust性能
- 使用jira管理Scrum敏捷项目实战(三)jira自定义工作流
- 禅道修改成自己得数据库