TCP编程案例

笔记:(本题可能需要的)

TCP协议:

TCP协议进行通信的两个应用进程:客户端、服务端。

使用TCP协议前,须先建立TCP连接,形成基于字节流的传输数据通道

传输前,采用“三次握手”方式,点对点通信,是可靠的

传输完毕,需释放已建立的连接,效率低

在发送数据的准备阶段,客户端与服务器之间的三次交互,以保证连接的可靠

在发送数据结束后,释放连接时需要经过四次挥手

Socket类

网络上具有唯一标识的IP地址和端口号组合在一起构成唯一能识别的标识符套接字(Socket)

Socket相关类API

   ServerSocket类

ServerSocket类的构造方法:

ServerSocket(int port) :创建绑定到特定端口的服务器套接字。

ServerSocket类的常用方法:

Socket accept():侦听并接受到此套接字的连接。

     Socket类

Socket类的常用构造方法

public Socket(InetAddress address,int port):创建一个流套接字并将其连接到指定 IP 地址的指定端口号。

public Socket(String host,int port):创建一个流套接字并将其连接到指定主机上的指定端口号。

   Socket类的常用方法

public InputStream getInputStream():返回此套接字的输入流,可以用于接收消息

public OutputStream getOutputStream():返回此套接字的输出流,可以用于发送消息

public void close():关闭此套接字。套接字被关闭后,便不可在以后的网络连接中使用(即无法重新连接或重新绑定)。需要创建新的套接字对象。 关闭此套接字也将会关闭该套接字的 InputStream 和 OutputStream。

例题1:客户端发送内容给服务端,服务端将内容打印到控制台上。注意点:先启动服务端,在启动客户端这里的IP地址和端口号使用自己电脑的查询IP地址:在运行框输入ipconfig查询端口号:在运行框输入netstas -ano
客户端创建步骤:
》1创建一个Socket创建一个IP地址,创建一个端口号;Socket是由IP地址和端口号组合在一起组合在一起的;----------IP地址和端口号都是服务端的将IP地址和端口号传入Socket构造器中,创建Socket对象(即创建一个流套接字)
》发送数据通过Socket对象调用getOutputStream()方法------返回此套接字的输出流通过输出流对象调用write()方法--------书写要发送的信息
》关闭资源(在关闭前都要判断该对象是否创建成功)关闭流资源关闭流套接字资源
  @Test// 客户端public void client() throws IOException {Socket socket = null;OutputStream os = null;try {//创建一个SocketInetAddress inetAddress = InetAddress.getByName("192.168.242.33");//声明对方的IP地址int port=10620;//声明对方的端口号socket = new Socket(inetAddress, port);//发送数据os = socket.getOutputStream();os.write("你好,我是客户端,请多多关照".getBytes());} catch (IOException e) {e.printStackTrace();} finally {//关闭Sockettry {if(socket!=null)socket.close();} catch (IOException e) {e.printStackTrace();}try {if(os!=null)os.close();} catch (IOException e) {e.printStackTrace();}}}
服务端创建步骤
》创建一个ServerSocket(即创建绑定到特定端口的服务器套接字)
》调用accept(),接受客户端的Socket通过前面ServerSocket的对象调用accept()方法(阻塞式方法)-----------侦听并接受到此套接字的连接。调用accept()方法返回的是一个Socket类的对象--------表示连接成功,接受客户端的Socket
》接收数据通过前面得到的Socket的对象来调用getInputStream()------------得到流对象通过流的对象来读取数据
》关闭资源(在关闭前都要判断该对象是否创建成功)关闭ServerSocket资源关闭Socket资源关闭流资源
 @Test//服务端public void server() throws IOException {ServerSocket serverSocket = null;Socket socket = null;//阻塞式的方法InputStream is = null;try {//创建一个ServerSocketint port=10620;serverSocket = new ServerSocket(port);//调用accept(),接受客户端的Socketsocket = serverSocket.accept();//接收数据is = socket.getInputStream();byte[] buffer=new byte[1024];int len;ByteArrayOutputStream baos = new ByteArrayOutputStream();//内部维护了一个byte数组while ((len=is.read(buffer))!=-1){//错误的
//                String str = new String(buffer, 0, len);
//                System.out.println(str);//正确的baos.write(buffer,0,len);}System.out.println(baos.toString());System.out.println("数据接收完毕");} catch (IOException e) {e.printStackTrace();} finally {//关闭Socket,ServerSocket,流try {if(socket!=null)socket.close();} catch (IOException e) {e.printStackTrace();}try {if(serverSocket!=null)serverSocket.close();} catch (IOException e) {e.printStackTrace();}try {if(is!=null)is.close();} catch (IOException e) {e.printStackTrace();}}}

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

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

相关文章

静态链接的特点 ;动态链接的特点

1) 静态链接的特点 静态链接(Static Linking)是在程序编译时,将程序中使用的所有库函数和代码直接复制到最终生成的可执行文件中。其特点包括: 独立可执行文件:生成的可执行文件包含了程序运行所需的所有代码和数据&…

STM32 BootLoader 刷新项目 (十三) Python上位机介绍

STM32 BootLoader 刷新项目 (十三) Python上位机介绍 大家好,这是我们STM32 BootLoader的最后一篇文章了,讲述用Python写的上位机,也更新了半年时间了,谢谢大家的支持,到目前为止,已经更新了12篇文章了&am…

Kronecker Sum

文章目录 1. kronecker sumpython 代码 1. kronecker sum A [ 6 8 1 4 ] ; B [ 5 3 7 6 ] ; \begin{equation} A\begin{bmatrix}6&8\\\\1&4\end{bmatrix};B\begin{bmatrix}5&3\\\\7&6\end{bmatrix}; \end{equation} A ​61​84​ ​;B ​57​36​ ​;​​ k…

ArUco识别定位原理

1. ArUco是什么 ArUco marker是一种汉明码方格图。它由一个宽的黑边和一个内部的二进制矩阵组成,黑色的边界有利于快速检测到图像,Marker ID是他的二进制矩阵编码,Marker size是图片的大小。黑色方块对应0,白色方块对应1&#xf…

每天五分钟机器学习:平行和重合

本文重点 在前面的课程中,我们学习了超平面分离定理,这里面有一个超平面的概念,那么本文学习下,什么情况下超平面是重合的,什么情况下超平面是平行的,这对后面我们学习支持向量机特别重要。 超平面的定义 超平面是指在n维空间中,余维度为1的子空间,即超平面是n维空间…

【学习总结|DAY011】Java数组、二维数组

一、数组概述 在Java编程中,数组是一种用于存储固定大小同类型元素的集合。它提供了随机访问元素的能力,使得处理大量数据变得更加高效。 二、一维数组 1. 定义与初始化 一维数组是最简单的数组形式,其定义方式如下: dataTyp…

Unity 基于Collider 组件在3D 物体表面放置3D 物体

实现 从鼠标点击的屏幕位置发送射线,以射线监测点击到的物体,根据点击物体的法线向量调整放置物体的位置及朝向。 Ray ray Camera.main.ScreenPointToRay(Input.mousePosition); if (Physics.Raycast(ray, out RaycastHit hit, 100)) {obj.transform.…

uniapp页面不跳转问题!(使用uni.$u.route或者原生uni.navigateTo)页面跳转ios无效果(既不报错也不跳转页面)

1.问题描述: 通常使用添加事件来触发页面跳转都没问题,但是现在业务需求,在一个方法中自动去携带参数跳转到另外一个页面,android真机无问题,就ios一直无法跳转过去! 2.解决方法: 2.1 必须使用setTimeout来延迟跳转 2.2 setTimeout的延迟时间必须要大于300 不要问为什么…

递归 算法

递归、搜索与回溯算法 1. 汉诺塔2. 合并两个有序链表3. 反转链表4. 两两交换链表中的节点5. Pow(x,n)-快速幂 1. 汉诺塔 题目链接: 面试题 08.06. 汉诺塔问题 解题思路: 首先观察有一个、两个、三个盘子时的情况,手…

深度学习常用指标

1. 混淆矩阵(误差矩阵) 2. 准确率(overall accuracy) 代表了所有预测正确的样本占所有预测样本总数的比例 这里分类正确代表了正样本被正确分类为正样本,负样本被正确分类为负样本 3. 平均精度(average…

BERT的中文问答系统50

我们将对BERT的中文问答系统48-1代码进行以下改进: 1.增加时间日期和日历功能:在GUI中增加显示当前时间和日期的功能,并提供一个日历组件。 2.增加更多模型类型:增加娱乐、电脑、军事、汽车、植物、科技、历史(朝代、皇帝)、名人、生活(出行、菜品、菜谱、居家),法律、…

黑马JavaWeb-day06、07、08(SQL部分) _

文章目录 MYSQL概述数据模型SQL简介SQL分类 DDL数据库操作表操作 DML增(INSERT)改(UPDATE)删(DELETE) DQL基本查询条件查询(where)分组查询(group by)排序查询…

浏览器同源策略、跨域、跨域请求,服务器处理没、跨域解决方案

目录 什么是同源策略什么是跨域发生跨域时,服务器有没有接到请求并处理响应:(两种情况) 如何解决跨域 什么是同源策略 概念: 同源策略是浏览器的一种安全机制,用于防止恶意网站对用户的敏感数据进行未经授…

D87【python 接口自动化学习】- pytest基础用法

day87 pytest运行参数 -m -k 学习日期:20241203 学习目标:pytest基础用法 -- pytest运行参数-m -k 学习笔记: 常用运行参数 pytest运行参数-m -k pytest -m 执行特定的测试用例,markers最好使用英文 [pytest] testpaths./te…

【嘟嘟早教卡】 小程序源码分享带后台管理

【嘟嘟早教卡】是专门为 3-6 岁婴幼儿童学习普通话、英语研发的早教启蒙认知识字的小程序 小程序由 Taro 及 Tailwind CSS 构建而成,后台管理使用 Laravel 及 Tailwind CSS 想法源于小时候玩的认知卡片,基本大部分家庭都买过认知卡片,我按照…

数据分析学习

数据分析的定义 数据分析是通过对收集到的数据进行清理、转换、建模、分析和解释,从中提取有用的信息和洞察,以帮助做出更好的决策。数据分析可以应用于各种领域,比如商业、金融、医疗、市场营销等,目的是通过数据来发现模式、趋…

Python几种常用数据结构(重制版)

一、列表 [List] 定义:有序可重复的数据集合。示例:my_list [element1, element2, element3]增加元素方法: append():在列表末尾增加单个元素(列表特有方法),例如 my_list.append(element)。e…

黑马微服务开发与实战学习笔记_MybatisPlus_P1介绍与快速入门

系列博客目录 文章目录 系列博客目录MybatisPlus介绍快速入门Part1:入门案例Part1.1:MyBatis项目Part1.2:实现MP Part2:常见注解Part2.1:约定Part2.2:常见注解 Part3:常见配置MyBatisPlus使用的基本流程是什么? MybatisPlus介绍 在Mybatis上加了Plus,表示对Mybati…

虚幻引擎---材质篇

一、基础知识 虚幻引擎中的材质(Materials) 定义了场景中对象的表面属性,包括颜色、金属度、粗糙度、透明度等等;可以在材质编辑器中可视化地创建和编辑材质;虚幻引擎的渲染管线的着色器是用高级着色语言(…

爬虫专栏第一篇:深入探索爬虫世界:基础原理、类型特点与规范要点全解析

本专栏会对爬虫进行从0开始的讲解,每一步都十分的细致,如果你感兴趣希望多多点赞收藏关注支持 简介:文章对爬虫展开多方面剖析。起始于爬虫的基本概念,即依特定规则在网络抓取信息的程序或脚本,在搜索引擎信息提取上作…