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协议数据传输(服务器端开启多线程)相关推荐

  1. 网络协议-网络分层、TCP/UDP、TCP三次握手和四次挥手

    网络的五层划分是什么? 应用层,常见协议:HTTP.FTP 传输层,常见协议:TCP.UDP 网络层,常见协议:IP 链路层 物理层 TCP 和 UDP 的区别是什么 TCP/UDP 都属于传输层的协 ...

  2. TCP三次握手和四次挥手的解释

    基础知识 在TCP层,有个FLAGS字段,这个字段有以下几个标识:SYN, FIN, ACK, PSH, RST, URG. 其中,对于我们日常的分析有用的就是前面的五个字段. 它们的含义是: SYN ...

  3. 【Linux云计算架构:第三阶段-Linux高级运维架构】第26章——tcp三次握手四次挥手及在局域网中使用 awl伪装MAC地址进行多线程SYN攻击

    25.1 tcp三次握手及tcp连接状态(含tcpdum抓包分析) 25.2 tcp四次挥手及tcp连接状态 25.3 实战:在局域网中使用 awl伪装MAC地址进行多线程SYN攻击 ssh 客户端: ...

  4. TCP三次握手与四次挥手(详解)

    TCP三次握手 一:引出 客户端与服务器之间数据的发送和返回的过程当中需要创建一个叫TCP connection的东西:由于TCP不存在连接的概念,只存在请求和响应,请求和响应都是数据包,它们之间都是 ...

  5. 跟着动画学习 TCP 三次握手和四次挥手

    TCP三次握手和四次挥手的问题在面试中是最为常见的考点之一.很多读者都知道三次和四次,但是如果问深入一点,他们往往都无法作出准确回答. 本篇尝试使用动画来对这个知识点进行讲解,期望读者们可以更加简单地 ...

  6. 【转】跟着动画来学习TCP三次握手和四次挥手

    最近看到一篇很通俗易懂的描述TCP三次握手和四次挥手概念的文章,觉得特别好,怕以后找不到了,特意转载在这里学习一下. 原文地址:跟着动画来学习TCP三次握手和四次挥手 作者:老錢 链接:https:/ ...

  7. wireshark抓包图解 TCP三次握手/四次挥手详解

    一. TCP/IP协议族 TCP/IP是一个协议族,通常分不同层次进行开发,每个层次负责不同的通信功能.包含以下四个层次: 1. 链路层,也称作数据链路层或者网络接口层,通常包括操作系统中的设备驱动程 ...

  8. TCP三次握手之-awl工具-SYN洪水攻击

    文章目录 云盾数据 TCP三次握手 TCP报文段的头部格式 实战-使用tcpdump 抓包 tcpdump 常用参数 tcpdmp 抓包 awl -syn-洪水攻击 原理 实战 总结: 云盾数据 - ...

  9. TCP三次握手,四次挥手详解

    本文是对小林的图解网络的总结 TCP简介 TCP作为一个传输层协议,是一个面向连接的字节流,为应用层提供端到端的传输服务.和UDP不同的是,TCP提供的是可靠的面向连接传输服务,并且提供了流量控制等功 ...

最新文章

  1. linux-关机与重启命令
  2. 微网站|h5弹窗|手机网站 html5 弹窗、弹层、提示框、加载条
  3. Deep learning:三十四(用NN实现数据的降维)
  4. java url 传值乱码问题_java 页面url传值中文乱码问题解决
  5. [USACO DEC13] 虫洞
  6. ImageJ 插入插件和基本教程
  7. java 流水账号生成器_Java之流水号生成器(示例代码)
  8. html 空格怎么打,空白空格怎么打?
  9. 【Android破解笔记】割绳子2内购
  10. 神经网络各种评判指标
  11. 迅雷某页面存在sql注入漏洞
  12. 总结:机器学习中的基本数学知识
  13. HTML: 点击链接时在新窗口打开
  14. 用墨刀进行简单的后台页面设计
  15. MATLAB colorbar颜色红黄绿,Matlab获取colorbar颜色并转换为需要的CPT文件
  16. 高通平台启动log概述(PBL log、sbl1 log、kernel log)
  17. oracle删除字段速度,oracle删除字段
  18. 声网 Agora 本地服务端录制 SDK v3.0 版正式上线
  19. 电商项目实战--用户相关
  20. Windows死机代码翻译大全

热门文章

  1. 知识点13--认识K8s
  2. win7计算机搜索记录,如何在win7中清空电脑的搜索记录?
  3. [转载]裸写一个含内嵌IE控件的窗口
  4. java哪些超类_java – 超类常用方法实现
  5. Java+SWT实现播放器
  6. wireshark 抓包 出现 SSL Continuation Data
  7. python量化缠论买卖点_缠论K线图-笔-线段自动生成(17.6.22持续更新....)(迭代处理最后一段笔)让你更清晰看清买卖点...
  8. 性能测试Locust--(7)使用更快的HTTP client提高Locust性能
  9. 使用jira管理Scrum敏捷项目实战(三)jira自定义工作流
  10. 禅道修改成自己得数据库