一、TCP通信原理

     TCP(Transmission Control Protocol)协议是面向链接的通信协议,即数据传输之前,先在发送端和接收端建立逻辑链接,然后再传输数据,它提供了两台计算机之间可靠无差错的数据传输。TCP通信中必须明确客户端和服务器端,由客户端向服务端发送连接请求每次连接的创建都要经过三次握手。三次握手:第一次握手:客户端向服务端发出连接请求,等待服务器确认。第二次握手:服务端向客户端回复一个响应,通知客户端收到连接请求第三次握手:客户端再次向服务端发送确认信息,确认连接完成三次握手之后,连接建立,客户端和服务端开始进行数据传输,可以保证数据安全。数据传输结束以后,断开连接会进行四次挥手。四次挥手:第一次挥手:客户端向服务端发送断开连接请求,表示数据发送完毕。第二次挥手:服务端收到请求后,回复客户端,同意关闭连接的请求。第三次挥手:服务端向客户端发出断开连接的请求。第四次挥手:客户端收到服务端请求后,向服务端发送确认信息,服务端接收到确认信息后断开连接。客户端等待之后没有收到服务端的回复,证明服务端已正常关闭,客户端也关闭。

二、TCP发送数据

发送数据的步骤:
1、创建客户端Socket对象
2、获取输出流,写入数据
3、释放资源

三、TCP接收数据

接收数据的步骤:
1、创建服务端的Socket对象
2、监听客户端连接,返回Socket对象
3、获取输入流读取数据
4、释放资源

四、TCP通信案例

/*TCP客户端
*/public static void main(String[] args) throws IOException {//创建客户端的Socket对象//Socket(String host, int port)//          创建一个流套接字并将其连接到指定主机上的指定端口号。Socket s = new Socket("192.168.1.5", 10000);//OutputStream getOutputStream()返回此套接字的输出流OutputStream outputStream = s.getOutputStream();//写入一个字符串outputStream.write("Hello".getBytes());//告诉服务端发送结束// void shutdownOutput() 禁用此套接字的输出流。s.shutdownOutput();//关闭客户端s.close();}//TCP服务端
public static void main(String[] args) throws IOException {//创建服务端的ServerSocket对象//ServerSocket(int port)创建绑定到特定端口的服务器套接字。ServerSocket ss = new ServerSocket(10000);//获取输入流读取数据,并把数据显示在控制台//Socket accept()侦听并接受到此套接字的连接。Socket socket = ss.accept();// InputStream getInputStream()返回此套接字的输入流。InputStream inputStream = socket.getInputStream();//读取一次数据byte[] bytes = new byte[1024];// int read(byte[] b, int off, int len)//     将输入流中最多 len 个数据字节读入 byte 数组。int len = inputStream.read(bytes);String str = new String(bytes,0, len);System.out.println("接收到的数据是:" + str);//关闭服务端ss.close();}
先运行服务端后运行客户端。运行结果:
服务端输出:接收到的数据是:Hello!


发送端无任何信息

Java学习笔记—TCP通信相关推荐

  1. Java学习笔记—UDP通信

    一.UDP通信原理 UDP协议(用户数据报协议 User Datagram Protocol)是一种无连接通信协议, 即在数据传输时数据发送端和接收端不建立逻辑链接.因此UDP协议是一种 不可靠的网络 ...

  2. java学习笔记14--多线程编程基础1

    本文地址:http://www.cnblogs.com/archimedes/p/java-study-note14.html,转载请注明源地址. 多线程编程基础 多进程 一个独立程序的每一次运行称为 ...

  3. Java学习笔记(7)——Java基础之IO多线程网络思维导图

    Java面向对象学习笔记之:包括IO(字节流,字符流,节点流,处理流).线程(线程创建,线程控制,线程同步).网络(TCP Scoket,  UDP Scoket)(全屏观看Java学习笔记(7)-- ...

  4. 嵌入式linux学习笔记--TCP通讯整理

    嵌入式linux学习笔记–TCP通讯整理 之前的项目中使用到了比较多的tcp 通讯相关的知识,一直也没有进行整理,今天准备拿出时间好好的整理一下TCP通讯的整个过程.预计会整理linux和window ...

  5. LiteOS学习笔记-5通信模组之LiteOS的SAL及socket编程

    LiteOS学习笔记-5通信模组之LiteOS的SAL及socket编程 一.SAL套接字抽象层 二.Socket套接字简介 Socket概述 Socket结构体 字节序转换函数 ip地址的转换 字节 ...

  6. Java学习笔记之基础篇

    Java学习笔记之基础篇 目录 Java如何体现平台的无关性? 面向对象(OO)的理解 面向对象和面向过程编程的区别 面向对象三大特征 静态绑定和动态绑定(后期绑定) 延伸:类之间的关系 组合(聚合) ...

  7. Java 学习笔记:第一章 Java入门

    Java 学习笔记:第一章 Java入门 1.1 计算机语言发展史以及未来方向 1.2 常见编程语言介绍 C语言 C++ 语言 Java语言 PHP 语言 Object-C和Swift 语言 Java ...

  8. java学习笔记11--Annotation

    java学习笔记11--Annotation Annotation:在JDK1.5之后增加的一个新特性,这种特性被称为元数据特性,在JDK1.5之后称为注释,即:使用注释的方式加入一些程序的信息. j ...

  9. java学习笔记13--反射机制与动态代理

    本文地址:http://www.cnblogs.com/archimedes/p/java-study-note13.html,转载请注明源地址. Java的反射机制 在Java运行时环境中,对于任意 ...

最新文章

  1. 大咖来信|浪潮刘军:AI计算将成为“新基建”核心支撑之一
  2. 阿里云发布新一代CDN 6.0 主打云与大数据融合
  3. 柔宇冲刺科创板IPO:3年营收5亿净亏31亿,乐视掘墓人刘姝威坐镇董事会
  4. python爬虫动态加载页面_python3的爬虫笔记8——动态加载页面爬虫
  5. 你可能不知道的switch
  6. 实时远程医学影像服务质量保障与网络优化
  7. 广东计算机应用基础试题及答案2019,2019年计算机应用基础试题库及答案.pdf
  8. Magento: 无法登录后台 Can't login to admin panel
  9. C#转C++的一点分享
  10. 【java】switch的用法介绍
  11. mongodb维护常用命令
  12. vscodehtml环境配置_从零开始配置 vscode
  13. DLP Digital Light Procession 的缩写 数字光处理
  14. 地图上导出坐标html文件格式,【教程】奥维地图如何导出含坐标的高清tiff影像图,实现ArcGIS加载使用...
  15. 读书、学习、工作和生活中收集的20条经典语录:21-40
  16. c语言总分和平均分,用C语言编程平均分数
  17. python生成纯色或渐变色图片
  18. wagon-maven-plugin插件实现自动化构建部署到服务器
  19. 纪念特洛伊英雄 Sinon - SAP UI5 Mock Server 使用步骤和工作原理介绍
  20. 号角的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告

热门文章

  1. 自己常用的Linux命令总结
  2. linux 编译多个文件,linux gcc编译多个源文件的方法
  3. android webview 图表,Android WebView 无法正常显示网页图表
  4. JS之onsubmit事件与组织事件外延
  5. centos7.3下apache搭建django[未成功]
  6. [SDOI 2010]外星千足虫
  7. Cocos2dx 3.11版本 视频添加跳过按钮
  8. 查看一个结构体成员的方法
  9. 深入浅出InfoPath——动态获取InfoPath中的命名空间
  10. python如何运行py程序_如何用Python汇款:Web3.py教程