Java学习笔记—TCP通信

一、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!

在这里插入图片描述
发送端无任何信息
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/433725.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python 网页编程- Pyramid 安装测试

http://docs.pylonsproject.org/projects/pyramid/en/1.4-branch/narr/install.html 是我在csdn的博客:http://blog.csdn.net/spaceship20008/article/details/8767884 放在cnblogs做备份 按照介绍操作。 我用的是mint13, python 3.2.3版本。 使用的是virtualenv 开…

excel 2007 vba与宏完全剖析_Excel怎么保护自己的劳动成果?强制用户启用宏,再加上这一步...

知识改变命运,科技成就未来。当Excel工作簿中含有VBA代码时,用户在使用时需要启用宏,否则工作簿的某些功能就会失效。或者是编辑的VBA代码含有定期删除指令,为了保证工作簿的安全性,和防止他人禁用宏造成知识产权法受到…

用python画国旗的程序_用Python的Turtle模块绘制五星红旗

Turtle官方文档 turtle的基本操作 # 初始化屏幕 window turtle.Screen() # 新建turtle对象实例 import turtle aTurtle turtle.Turtle() # 海龟设置 aTurtle.hideturtle() # 隐藏箭头 aTurtle.speed(10) # 设置速度 # 前进后退,左转右转 aTurtle.fd(100) # 前进10…

丰田pcs可以关闭吗_丰田新款卡罗拉变化这么大 让老车主陷入沉思

【太平洋汽车网 导购频道】小胖是一名95后的汽车编辑,年纪轻轻又从事汽车编辑这一岗位,大家可能会觉得他肯定是一位充满热血、喜欢驾驶、热爱汽车的年轻人,那如果我告诉你小胖的座驾是一辆老卡罗拉(询底价|查参配),你还会觉得小胖…

python从小白到大牛pdf 下载 资源共享_Kotlin从小白到大牛 (关东升著) 中文pdf高清版[12MB]...

本书是一本Kotlin语言学习立体教程,主要内容包括:Kotlin语法基础、Kotlin编码规范、数据类型、字符串、运算符、程序流程控制、函数、面向对象基础、继承与多态、抽象类与接口、高阶函数、Lambda表达式、数组、集合、函数式编程API、异常处理、线程、协程…

MySQL——基本配置

一、新建配置文件 在MySQL的安装目录下D:\Mysql\mysql-8.0.28-winx64\bin中新建一个文本文件,文件内容如下: [mysql] default-character-setutf8[mysqld] character-set-serverutf8 default-storage-engineINNODB sql_modeSTRICT_TRANS_TABLES,NO_ZERO_…

在mac上用文本编辑器写python_Mac系统Python解释器、PyCharm编辑器安装及使用方法详解...

『环境配置』- 工欲善其事,必先利其器 视频讲解教程:[Mac系统Python开发环境配置教程详解(Python技术客栈)](https://www.bilibili.com/video/av80761677)【开发环境配置】Mac系统Python开发环境配置教程详解(Python技…

hdu 2149 巴什博弈

http://acm.hdu.edu.cn/showproblem.php?pid2149 分析:就是巴什博弈的概念。 题目要求:对于每组数据,在一行里按递增的顺序输出Lele第一次可以加的价。两个数据之间用空格隔开。如果Lele在第一次无论如何出价都无法买到这块土地,…

MySQL——数据库和表的增删改查

1、DDL操作数据库 ①查询 SHOW DATABASES;②创建 创建数据库 CREATE DATABASE 数据库名称; 创建数据库(判断,如果则创建) CREATE DATABASE IF NOT EXISTS 数据库名称;③删除 删除数据库 DROP DATABASE 数据库名称; 删除数据库(判断,如果存在则删除) DRO…

pc模式 华为mate30_号称“重构想象”的华为Mate30系列,到底有多颠覆?一睹为快...

9月19日迎来了华为全球发布会,和9月11日的苹果新品发布会时间挨得非常近,大家感受到了什么吗?华为Mate30系列于北京时间9月19日晚上8点在慕尼黑正式亮相了,以“重构想象”为主题,发布了4款新机:Mate30、Mat…

python数据分析师书籍_如何自学成为数据分析师

展开全部 第1本《谁说菜2113鸟不会数据5261分析入门篇》 很有趣的数据分析书!基本看过就能明白4102,以小说的1653形式讲解,很有代入感。包含了数据分析的结构化思维、数据处理技巧、数据展现的技术,很能帮我们提升职场竞争能力。找…

Java进阶07 嵌套类

作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明。谢谢! 到现在为止,我们都是在Java文件中直接定义类。这样的类出现在包(package)的级别上。Java允许类的嵌套定义。 这里将讲解如何在一个类…

MySQL笔记——DQL查询数据

DQL查询包括以下这些内容: • 基础查询 • 条件查询(WHERE) • 分组查询(GROUP BY) • 排序查询(ORDER BY) • 分页查询(LIMIT)(一)、基础查询 1、查询多个字段 SELECT 字段列表 FROM 表名; SELECT * FROM 表名; 当前表中数据如下: 2、去除重复记录 …

c++两个vector合并_数据结构——算法初步(4)——合并排序算法

从之前的学习可以看到,对大型vectory要求的排序,选择排序算法显然不符合要求,因为运行时间与输入问题规模大小的平方成比例增加,对于以线性顺序处理向量的元素的大多数排序算法也是如此。 所以要采用不同的方法来开发…

asterisk 互联

如上图所示,两个sip客户端分别注册在A,B两个asterisk服务器下,让A和B通过各自的asterisk服务器来相互通信。 xlite A的账号为2001,xlite B的账号为5001 asterisk A的sip.conf如下配置: [general] contextunauthenticated allow…

[活动通知]Nanjing GDG 2013年4月活动

致各位亲爱的 Google 技术爱好者 很高兴的通知各位朋友,Nanjing GDG 将在本周日 (04/21) 举办我们 Nanjing GDG 的 4月份活动,热烈欢迎大家报名参加。 主题:利用开放社区和代码库来构建 Android 应用 时间: 4月21 日 (周日) 下午 …

MySQL笔记——外键约束和表关系(一对一,多对一,多对多)

一、外键约束 概念:外键用来让两个表的数据之间建立链接,保证数据的一致性和完整性。语法:(1)添加约束-- 创建表是添加外键约束CREATE TABLE 表名(列名 数据类型,…[CONSTRAINT] [外键名称] FOREIGN KEY(外键列名) REF…

仿个人税务 app html5_【注意】你下载的可能是个假的个税App

新个税法从1月初开始实施。国家税务总局推出“个人所得税”APP,方便纳税人线上填报资料进行专项抵扣。几天来,这款APP的下载量和注册量大幅增长。随之而来的是,很多商业公司制作的各类“个税”APP也成为热门。这其中有不少纯属蹭热点&#xf…

MySQL笔记——多表查询

多表查询不能使用 SELECT * from emp, dept; 会产生笛卡尔积。 笛卡尔积,有A,B两个集合,A中有5条信息,B中有4条信息,那么查询结果就是5*420条一、内连接查询 -- 隐式内连接SELECT 字段列表 FROM 表1,表2,… WHERE 条件…

遇见王沥川的人生感悟_23岁酱油泡饭默默无闻,31岁逆袭人生,王彦霖有何魅力?...

文/小白说娱S姐 原创精品,请勿转载如果兜里只剩下1块钱,生活所迫你会怎样过?王彦霖23岁刚毕业熬过了1元危机,他永远都不会想到当年咬牙坚持熬成就了如今的综艺诸葛。《元气满满的哥哥》连播六期多次排名第一,成为芒果台…