Java第二十一章总结

网络编程三要素

ip地址:计算机在网络中的唯一标识
端口:应用程序在计算机中唯一标识
协议:通信协议,常见有UDP和TCP协议

InetAddress类

表示Internet协议地址

        //返回InetAddress对象
        InetAddress byName = InetAddress.getByName("DESKTOP-1ET1T7L");

        //返回计算机名
        String hostName = byName.getHostName();

        //返回Ip地址
        String hostAddress = byName.getHostAddress();

端口
端口号:用两个字节表示的整数,它的取值范围是0~ 65535。其中,0~1023之间的端口号用于一些知名的网络服务和应用,普通的应用程序需要使用1024以上的端口号。如果端口号被占用,会导致程序启动失败

协议
计算机网络中,连接和通信的规则被称为网络通信协议

UDP协议
 用户数据报协议(User Datagram Protocol)
 UDP是无连接通信协议,即在数据传输时,数据的发送端和接收端不建立逻辑连接
 UDP协议消耗系统资源小,通信效率高,所以通常都会用于音频、视频和普通数据的传输

TCP协议
 传输控制协议 (Transmission Control Protocol)

 TCP协议是面向连接的通信协议,即传输数据之前,在发送端和接收端建立逻辑连接,然后再传输数据,它提供了两台计算机之间可靠无差错的数据传输。

 在TCP连接中必须要明确客户端与服务器端,由客户端向服务端发出连接请求,每次连接的创建都需要经过“三次握手”

三次握手:
  第一次握手,客户端向服务器端发出连接请求,等待服务器确认

  第二次握手,服务器端向客户端回送一个响应,通知客户端收到了连接请求

  第三次握手,客户端再次向服务器端发送确认信息,确认连接

UDP发送数据
Java提供了DatagramSocket类作为基于UDP协议的Socket

构造方法

 相关方法

        //创建一个发送数据Socket对象
        DatagramSocket ds=new DatagramSocket();
        //创建一个包,用于存放要发送的数据
        byte[] bys="hello".getBytes();
        DatagramPacket dp=new DatagramPacket(bys,bys.length, InetAddress.getByName("127.0.0.1"),8888);
        //发送数据
        ds.send(dp);
        ds.close();
      

 

UDP接受数据

构造方法

方法名说明
DatagramPacket(byte[] buf, int len)创建一个DatagramPacket用于接收长度为len的数据包

相关方法

        //创建一个接收端的Socket对象
        DatagramSocket ds=new DatagramSocket(8888);
        
        //创建一个接受数据的包
        byte[] bys=new byte[1024];
        DatagramPacket dp=new DatagramPacket(bys,bys.length);
        
        //接收数据
        ds.receive(dp);
        //获取数据
        byte[] data = dp.getData();
        //dp.getLength是接受到的数据长度
        System.out.println(new String(data,0,dp.getLength()));
        ds.close();
 

UDP三种通讯方式

单播:两个主机之间的端对通信

组播:对一组特定的主机进行通信

广播:一个主机对整个局域网所有主机通信

组播代码实现:

//发送端
        //创建发送端的Socket对象
        DatagramSocket ds=new DatagramSocket();
        //创建数据包,
        byte[] bys="hello".getBytes();
        DatagramPacket dp=new DatagramPacket(bys,bys.length, InetAddress.getByName("224.0.1.1"),8888);
        //发送
        ds.send(dp);
        //释放资源
        ds.close();
        
//========================================================
//接收端

        //创建一个接收端的Socket对象
        MulticastSocket ms=new MulticastSocket(8888);
        //创建一个接受数据的包
        byte[] bys=new byte[1024];
        DatagramPacket dp=new DatagramPacket(bys,bys.length);

        //把当前电脑绑定一个组播地址
        ms.joinGroup(InetAddress.getByName("224.0.1.1"));

        //接收数据
        ms.receive(dp);
        //获取数据
        byte[] data = dp.getData();
        //dp.getLength是接受到的数据长度
        System.out.println(new String(data,0,dp.getLength()));
        ms.close();

TCP发送数据
客户端用用Socket类,
服务器端用ServerSocket类

Socket构造方法


相关方法方

        //创建一个客户端Socket对象
        Socket s=new Socket("127.0.0.1",8888);
        //获取输出流,输出数据
        OutputStream outputStream = s.getOutputStream();
        outputStream.write("hello".getBytes());
        //释放资源
        s.close();
 

TCP接收数据

构造方法

方法名说明
ServletSocket(int port)创建绑定到指定端口的服务器套接字

相关方法

方法名说明
Socket accept()监听要连接到此的套接字并接受它

        //创建服务器端ServerSocket对象
        ServerSocket ss=new ServerSocket(8888);
        //监听
        Socket accept = ss.accept();
        //创建一个输入流对象接收数据
        InputStream inputStream = accept.getInputStream();
        byte[] bytes=new byte[1024];
        int len=inputStream.read(bytes);
        String data =new String(bytes,0,len);
        System.out.println(data);
        accept.close();
        ss.close();
 

文件上传

从本地读取文件数据,发送给服务器端
服务器端接受数据后,保存到服务器本地

 

//客户端

   //获取客户端Socket对象
        Socket s = new Socket("127.0.0.1", 8888);
        //从本地读取要上次的文件
        BufferedInputStream bis = new BufferedInputStream(new FileInputStream("JavaSE\\aa.jpg"));
        OutputStream os = s.getOutputStream();
        byte[] bys = new byte[1024];
        int i;
        while ((i = bis.read(bys)) != -1) {
            // os.write(i);
            os.write(bys, 0, i);
        }

        os.flush();

        //给服务器一个结束标记,标识已经传输完毕
        s.shutdownOutput();

        //获取服务器给回的信息
        BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
        String line;
        while ((line = br.readLine()) != null) {
            System.out.println(line);
        }

        //释放资源
        bis.close();
        s.close();

//======================================

//服务器端

 //创建服务器ServerScoket对象
        ServerSocket ss = new ServerSocket(8888);
        //开始监听
        Socket s = ss.accept();
        //接受客户端数据
        InputStream is = s.getInputStream();
        //创建一个字符缓冲流保存接受的数据
        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("JavaSE\\bb.jpg"));
        int len;
        byte[] bys = new byte[1024];
        while ((len = is.read(bys)) != -1) {
            bos.write(bys, 0, len);
        }
        //告诉客户端已经接受完毕
        s.shutdownInput();

        //给客户端返回“上传成功信息”
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
        bw.write("上传成功");
        bw.newLine();
        bw.flush();

        //释放资源
        bos.close();
        s.close();
        ss.close();


 

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

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

相关文章

全国公共汽车、出租车拥有情况及客运量、货运量数据,shp、excel数据均有,多指标可查询

基本信息. 数据名称: 全国公共汽车、出租车拥有情况及客运量、货运量数据 数据格式: Shp、Excel 数据时间: 2020-2022年 数据几何类型: 面 数据坐标系: WGS84 数据来源:中国城市统计年鉴 数据字段: 序号字段名称字段说明1xzqhdm行政区划代码…

机器学习基础知识分享:深度学习

深度学习(Deep Learning)是近年来发展十分迅速的研究领域,并且在人工智能的很多子领域都取得了巨大的成功.从根源来讲,深度学习是机器学习的一个分支,是指一类问题以及解决这类问题的方法。 深度学习 为了…

vue中的内置指令v-model的作用和常见使用方法以及自定义组件上的用法

一、v-model是什么 v-model是Vue框架的一种内置的API指令,本质是一种语法糖写法,它负责监听用户的输入事件以更新数据,并对一些极端场景进行一些特殊处理。在Vue中,v-model是用于在表单元素和组件之间创建双向数据绑定的指令。它…

【AIGC】大语言模型的采样策略--temperature、top-k、top-p等

总结如下: 图片链接 参考 LLM解码-采样策略串讲 LLM大模型解码生成方式总结 LLM探索:GPT类模型的几个常用参数 Top-k, Top-p, Temperature

【动态规划系列】环形子数组的和-918

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

linux下的进程程序替换

进程程序替换 替换概念替换函数execl()execv()execvp()/execlp()execle()/execvpe() 如何在C/C程序里面执行别的语言写的程序。小tips 替换概念 当进程调用一种exec函数时,该进程的用户空间代码和数据完全被新程序替换,从新程序的代码部分开始运行。调用…

爬虫 selenium语法 (八)

目录 一、为什么使用selenium 二、selenium语法——元素定位 1.根据 id 找到对象 2.根据标签属性的属性值找到对象 3.根据Xpath语句获取对象 4.根据标签名获取对象 5.使用bs语法获取对象 6.通过链接文本获取对象 三、selenium语法——访问元素信息 1.获取属性的属性值…

有爱的冬天不再冷——壹基金儿童温暖包抵达富平

12月6日,富平县帮帮乐公益协会组织志愿者在协会楼下分装了由爱心企业、个人捐赠的144个壹基金儿童温暖包,争取在下周寒流来临前送到困境儿童手中,温暖他们的整个冬天。 壹基金温暖包项目是针对6—12岁困境儿童、留守儿童设计的暖冬应急生活物…

MySQL数据库sql语句操作

一、数据库模型 关系型数据库是一种以表格形式组织和存储数据的数据库。它使用关系模型,其中数据被组织为多个表格,每个表格包含了多个行和列。每个表格的列描述了数据的属性,而行包含了实际的数据记录。 非关系型数据库,也称为…

使用命令行创建vue3项目等待时间长解决方案

问题描述 今天在使用命令行创建vue3项目的时候,发现命令行窗口卡了很久,明明已经更换了安装包的源,并且检查环境变量配置正确的情况下,为什么还要等待那么久呢? 解决方案 使用命令再次检查更换淘宝的源是否配置成功…

玩转系统|利用HestiaCP自建NS解析及邮局并利用MailGun进行发信

前述 HestiaCP是一个VestaCP分叉来的产物,而同样作为VestaCP分叉来的myVesta也具有类似的功能。VestaCP本身作为一个社区的产区,其仅仅有一个商业插件需要每月付费5USD进行使用,因此为了达到完全开放使用的目的,这里选择使用Hest…

小电流MOSFET 选型分析数据,可应用于电子烟,电动工具,智能穿戴等产品上

小电流双N,D-N通道MOSFET,电压60V-100V左右 电流300mA-500MA,采用封装形式多样。具有低导通电阻,可快速切换速度,易于设计的驱动电路也易于并联,ESD保护,低电压驱动使该器件非常适合便携式设备…

通俗易懂的案例+代码解释AOP 切面编程

目录 1. 理解AOP2 Before2.1 controller层2.2 service层2.3 自定义注解2.4 切面 advice 3 After4 Around spring的三大核心:IOC控制反转、DI依赖注入、AOP面向切面编程 刚开始接触springboot项目,前两个使用的多,亲自使用AOP的机会并不多&…

【学习笔记】python仅拷贝list的值,引出浅拷贝与深拷贝

一、python 仅拷贝list的值(来源于gpt) 在 Python 中,可以使用切片或 copy() 方法来仅拷贝列表的值。 1、使用切片 a [1, 2, 3, 4, 5] b a[:] # 通过切片来拷贝 a 的值 在上面的代码中,我们使用切片来拷贝列表 a 的值&#xff…

长城之上的无人机:文化遗产的守护者

长城之上的无人机:文化遗产的守护者 在八达岭长城景区,两架无人机分别部署在了长城的南、北楼两点。根据当前的保护焦点和需求,制定了5条无人机综合巡查航线,以确保长城景区的所有开放区域都能得到有效监管。每天,无人…

【LeetCode】2703. 返回传递的参数的长度

返回传递的参数的长度 题目题解 题目 请你编写一个函数 argumentsLength,返回传递给该函数的参数数量。 示例 1: 输入:args [5] 输出:1 解释: argumentsLength(5); // 1只传递了一个值给函数,因此它应返…

zabbix、netdata和glances,做最简单的系统资源监控

软件需要显示服务器的资源信息(CPU、内存、网络、硬盘等),但是软件是在Docker容器中运行。 目前方案 通过ssh在主机上远程运行ps、free等指令,获取相应的信息。这种方案需要代码配置主机的IP,以及用户名和密码&#…

干爆ChatGPT,谷歌发布新大模型:Gemini

我是卢松松,点点上面的头像,欢迎关注我哦! 谷歌昨天又发布了一个新的大模型,叫Gemini(双子座时代)。打开Google AI 就能看到。 据说非常强,然后是一大堆夸奖,大概是本月中旬的时候正式推出。标题明晃晃写…

Java UDP 多人聊天室简易版

服务端 import java.io.*; import java.net.*; import java.util.ArrayList; public class Server{public static ServerSocket server_socket;public static ArrayList<Socket> socketListnew ArrayList<Socket>(); public static void main(String []args){try{…

Rask AI引领革新,推出多扬声器口型同步技术,打造本地化内容新纪元

“ Rask AI是一个先进的AI驱动视频和音频本地化工具&#xff0c;旨在帮助内容创作者和公司快速、高效地将他们的视频转换成60多种语言。通过不断创新和改进产品功能&#xff0c;Rask AI正塑造着未来媒体产业的发展趋势。 ” 在多语种内容创作的新时代&#xff0c;Rask AI不断突…