Day25

Day25

网络编程概念

计算机网络

网络编程:TCP协议的三次握手四次挥手

IP地址,端口号:取值范围:065535,保留端口号:01024。

网络协议:TCP协议(类比于打电话,双方需要连接),UDP协议(类比于发短信),Http协议

IP地址

知识点:InetAddress - 主机类

public static void main(String[] args) throws UnknownHostException {//获取本机的InetAddress对象InetAddress localHost = InetAddress.getLocalHost();System.out.println(localHost);System.out.println("------------");//获取服务器地址InetAddress byName = InetAddress.getByName("www.baidu.com");System.out.println(byName);System.out.println("------------");//获取服务器地址//注意:一个域名可以指向多个服务器InetAddress[] allByName = InetAddress.getAllByName("www.baidu.com");for (InetAddress inetAddress : allByName) {System.out.println(inetAddress);}}

网络协议

Socket:

Scoket也叫套接字,其表示的是IP地址和端口号的组合。

网络编程主要就是指Socket编程,网络间的通信其实就是Socket间的通信,数据就通过IO流在两个Scoket间进行传递。

TCP协议

知识点:InetAddress - 主机类:

public static void main(String[] args) throws UnknownHostException {//获取本机的InetAddress对象InetAddress localHost = InetAddress.getLocalHost();System.out.println(localHost);System.out.println("------------");//获取服务器地址InetAddress byName = InetAddress.getByName("www.baidu.com");System.out.println(byName);System.out.println("------------");//获取服务器地址//注意:一个域名可以指向多个服务器InetAddress[] allByName = InetAddress.getAllByName("www.baidu.com");for (InetAddress inetAddress : allByName) {System.out.println(inetAddress);}}

客户端与服务端:

//服务端
public class Server {public static void main(String[] args) throws IOException {//注意:关闭流等同于关闭Socket//大唐经理ServerSocket server = new ServerSocket(8080);//18号技师Socket socket = server.accept();//2.接受来自客户端的数据BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream(),"GBK"));String readLine = br.readLine();System.out.println(readLine);//3.向客户端发送数据PrintStream ps = new PrintStream(socket.getOutputStream());ps.println("18号:刚满18岁~~~");br.close();ps.close();server.close();}
//客户端
public class Client {public static void main(String[] args) throws UnknownHostException, IOException {//注意:关闭流等同于关闭Socket//小康Socket socket = new Socket("127.0.0.1",8080);//1.向服务端发送数据PrintStream ps = new PrintStream(socket.getOutputStream());ps.println("小康:小妹妹你多大了...");//4.接受来自服务端的数据BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream(),"GBK"));String readLine;readLine = br.readLine();System.out.println(readLine);ps.close();br.close();socket.close();}

知识点:TCP案例 – 传输文件

public class Server {public static void main(String[] args) throws IOException {ServerSocket server = new ServerSocket(8080);Socket socket = server.accept();BufferedInputStream bis = new BufferedInputStream(socket.getInputStream());BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("copy.mp4"));byte[] bs = new byte[1024];int len;while((len=bis.read(bs))!=-1){bos.write(bs,0,len);}bis.close();bos.close();server.close();}public class Client {/*** 知识点:TCP案例 -- 传输文件*/public static void main(String[] args) throws UnknownHostException, IOException {Socket socket = new Socket("127.0.0.1",8080);BufferedInputStream bis = new BufferedInputStream(new FileInputStream("copy.mp4"));BufferedOutputStream bos = new BufferedOutputStream(socket.getOutputStream());int len;byte[] bs=new byte[1024];while((len=bis.read(bs))!=-1){bos.write(bs,0,len);}bis.close();bos.close();socket.close();}

知识点:TCP案例 - 一对一聊天

public class Server {@SuppressWarnings("all")public static void main(String[] args) throws IOException {ServerSocket server = new ServerSocket(8080);Socket socket = server.accept();new ReceiveThread(socket).start();PrintStream ps = new PrintStream(socket.getOutputStream());Scanner scan = new Scanner(System.in);while(true){ps.println("18号技师:" + scan.next());}}
}public class Client {/*** 知识点:TCP案例 - 优化一对一聊天*/@SuppressWarnings("all")public static void main(String[] args) throws UnknownHostException, IOException {Socket socket = new Socket("127.0.0.1", 8080);new ReceiveThread(socket).start();PrintStream ps = new PrintStream(socket.getOutputStream());Scanner scan = new Scanner(System.in);while(true){ps.println("小康:" + scan.next());}}
}//接受消息的线程
public class ReceiveThread extends Thread{private Socket socket;public ReceiveThread(Socket socket) {this.socket = socket;}@Overridepublic void run() {BufferedReader br = null;try {br = new BufferedReader(new InputStreamReader(socket.getInputStream(),"GBK"));} catch (UnsupportedEncodingException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}String readLine;boolean bool = true;while(bool){try {readLine = br.readLine();System.out.println(readLine);}catch(SocketException e){bool = false;}catch (IOException e) {e.printStackTrace();}}}}

知识点:TCP案例 - 群聊

public class Client {/*** 知识点:TCP案例 - 群聊*/@SuppressWarnings("all")public static void main(String[] args) throws UnknownHostException, IOException {Socket socket = new Socket("127.0.0.1", 8080);new ReceiveThread(socket).start();PrintStream ps = new PrintStream(socket.getOutputStream());Scanner scan = new Scanner(System.in);while(true){ps.println("小康:" + scan.next());}}public class Server {public static ConcurrentHashMap<String, PrintStream> map = new ConcurrentHashMap<>();@SuppressWarnings("all")public static void main(String[] args) throws IOException {ServerSocket server = new ServerSocket(8080);while(true){Socket socket = server.accept();new ServerThread(socket).start();String ip = socket.getInetAddress().toString();PrintStream ps = new PrintStream(socket.getOutputStream());map.put(ip, ps);}}
}//接受消息的线程
public class ReceiveThread extends Thread{private Socket socket;public ReceiveThread(Socket socket) {this.socket = socket;}@Overridepublic void run() {BufferedReader br = null;try {br = new BufferedReader(new InputStreamReader(socket.getInputStream(), "GBK"));} catch (UnsupportedEncodingException e1) {e1.printStackTrace();} catch (IOException e1) {e1.printStackTrace();}boolean bool = true;while(bool){String readLine;try {readLine = br.readLine();System.out.println(readLine);} catch (SocketException e) {bool = false;} catch (IOException e) {e.printStackTrace();} }}}public class ServerThread extends Thread{private Socket socket;public ServerThread(Socket socket) {this.socket = socket;}@Overridepublic void run() {//接受当前Socket的消息,并发送给其他Sockettry {BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));while(true){String readLine = br.readLine();System.out.println(readLine);ConcurrentHashMap<String,PrintStream> map = Server.map;Set<Entry<String,PrintStream>> entrySet = map.entrySet();for (Entry<String, PrintStream> entry : entrySet) {String ip = entry.getKey();PrintStream ps = entry.getValue();if(!socket.getInetAddress().toString().equals(ip)){ps.println(readLine);}}}} catch (IOException e) {e.printStackTrace();}}
}

UDP协议

public class ReceiveThread extends Thread{private DatagramSocket socket;public ReceiveThread(DatagramSocket socket) {this.socket = socket;}@Overridepublic void run() {while(true){byte[] buf = new byte[1024];DatagramPacket p = new DatagramPacket(buf , buf.length);try {socket.receive(p);//socket.receive(p) 方法会阻塞当前线程,直到从网络上接收到一个数据报文。} catch (IOException e) {e.printStackTrace();}System.out.println(new String(buf).trim());}}
}public class SendThread extends Thread{private DatagramSocket socket;private String ip;private int port;private String nickName;public SendThread(DatagramSocket socket, String ip, int port, String nickName) {this.socket = socket;this.ip = ip;this.port = port;this.nickName = nickName;}@Overridepublic void run() {Scanner scan = new Scanner(System.in);while(true){byte[] buf = (nickName + ":" + scan.next()).getBytes();DatagramPacket p;try {p = new DatagramPacket(buf, 0, buf.length, InetAddress.getByName(ip), port);socket.send(p);//发送数据报包} catch (UnknownHostException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}}}public class Client01 {public static void main(String[] args) throws SocketException {//7070表示当前端口的端口号DatagramSocket socket = new DatagramSocket(7070);new SendThread(socket, "127.0.0.1", 8080, "小蒲").start();new ReceiveThread(socket).start();}
}public class Client02 {public static void main(String[] args) throws SocketException {//8080表示当前端口的端口号DatagramSocket socket = new DatagramSocket(8080);new SendThread(socket, "127.0.0.1", 7070, "小康").start();new ReceiveThread(socket).start();}
}

TCP VS UDP (学习后自行比对)

TCP UDP

是否连接 面向连接 无面向连接

传输可靠性 可靠 不可靠

应用场合 传输大量数据 少量数据

速度 慢 快

HTTP协议

知识点:http - 操作淘宝接口

public static void main(String[] args) throws IOException {//创建链接对象URL url = new URL("https://suggest.taobao.com/sug?code=gbk&q=始祖鸟&callback=cb");//获取链接对象HttpURLConnection connection = (HttpURLConnection) url.openConnection();//设置参数connection.setConnectTimeout(5000);//设置连接超时时间connection.setReadTimeout(5000);//设置读取超时时间connection.setDoInput(true);//设置允许使用输入流connection.setDoOutput(true);//设置允许使用输出流//获取响应状态码int responseCode = connection.getResponseCode();if(responseCode == HttpURLConnection.HTTP_OK){//获取响应中的数据BufferedReader br = new BufferedReader(new InputStreamReader(connection.getInputStream(),"UTF-8"));char[] cs = new char[1024];int len;while((len = br.read(cs)) != -1){System.out.println(new String(cs, 0, len));}br.close();}else if(responseCode == HttpURLConnection.HTTP_NOT_FOUND){System.out.println("响应错误,页面未找到");}}

知识点:http - 下载图片

public static void main(String[] args) throws IOException {//创建链接对象URL url = new URL("https://img2.baidu.com/it/u=2245838154,3561436125&fm=253&fmt=auto&app=120&f=JPEG?w=500&h=750");//获取链接对象HttpURLConnection connection = (HttpURLConnection) url.openConnection();//设置参数connection.setConnectTimeout(5000);//设置连接超时时间connection.setReadTimeout(5000);//设置读取超时时间connection.setDoInput(true);//设置允许使用输入流connection.setDoOutput(true);//设置允许使用输出流//获取响应状态码int responseCode = connection.getResponseCode();if(responseCode == HttpURLConnection.HTTP_OK){//获取响应中的数据BufferedInputStream bis = new BufferedInputStream(connection.getInputStream());BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("许凯.jpg"));byte[] bs = new byte[1024];int len;while((len=bis.read(bs)) != -1){bos.write(bs, 0, len);}bis.close();bos.close();}else if(responseCode == HttpURLConnection.HTTP_NOT_FOUND){System.out.println("响应错误,页面未找到");}}

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

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

相关文章

项目构建工具maven

一、概述 1、maven是apache的一个开源项目&#xff0c;是一个优秀的项目构建/管理工具 2、apache(软件基金会、非盈利组织、管理维护一些开源项目) 二、功能 1、管理项目中jar包和jar包与jar包之间的依赖 2、完成项目编译、测试、打包 三、核心文件 pom.xml:在里面配置相…

信息学奥赛初赛天天练-14-阅读程序-字符数组、唯一分解定理应用

更多资源请关注纽扣编程微信公众号 1 2019 CSP-J 阅读程序1 (程序输入不超过数组或字符串定义的范围&#xff1b;判断题正确填√,错误填&#xff1b;除特殊说明外&#xff0c;判断题1.5分&#xff0c;选择题3分&#xff0c;共计40分) 1 输入的字符串只能由小写字母或大写字母组…

Redis的非关系型数据库

第七天课堂笔记 今日目标 非关系型数据库&#xff08;nosql【not only SQL】数据库&#xff09; Redis的非关系型数据库 Redis的安装和配置 Redis常见数据类型 Redis特性 nosql数据库 not only sql数据库&#xff0c;非关系型数据库&#xff0c;往往采用类似于json来存储数…

【大宗】第一期:大航海时代下的[集运欧线]

一、大航海时代 - 集运欧线前世今生 01 航运合约指数的诞生 ‍‍‍‍ 2023年8月18日&#xff0c;上海期货交易所的伙伴们搞了个大新闻——他们推出了一种新的期货品种&#xff0c;叫做“欧线集运”。这可不是什么普通的期货&#xff0c;它是基于一个叫做SCFIS的指数&#xf…

上海汇正财经官网怎么样?客户好评如潮,口碑赞誉之声不绝于耳

在财经服务领域&#xff0c;客户评价是衡量一家企业信誉和服务质量的重要标准。上海汇正财经作为业内知名的财经服务平台&#xff0c;以其优质的服务赢得了广大客户的认可和好评。大量正面用户评价和成功服务的案例&#xff0c;充分证明了上海汇正财经是一个值得信赖的正规企业…

每日两题 / 131. 分割回文串 42. 接雨水(LeetCode热题100)

131. 分割回文串 - 力扣&#xff08;LeetCode&#xff09; 数据量较小&#xff0c;考虑直接暴力&#xff0c;每次dfs&#xff1a;以bg作为左区间&#xff0c;往右遍历&#xff0c;找到一段回文串区间后&#xff0c;将回文串插入vector<string>&#xff0c;并以下一个下标…

段位在于面对人性之恶,一笑而过

这个小哥哥不知道是哪里不对劲了&#xff0c;突然给我留言说我在骗流量&#xff0c;骗关注。公众号是我的&#xff0c;文章是我写的&#xff0c;主要分享的就是我创业的一些接单案例&#xff0c;因为之前收到很多无效的留言&#xff0c;寻求合作就几个字我不想接收无效信息&…

Day18学习Java

File - 文件类 File&#xff0c;是文件和目录路径名的抽象表示。 File只关注文件本身的信息&#xff0c;而不能操作文件里面的内容。 File类 – 表示文件或文件夹&#xff0c;不能对文件里的数据进行操作。 对文件里的数据进行操作的是&#xff1a;IO流。 需求1&#xff1a;通…

Unity 权限 之 Android 【权限 动态申请】功能的简单封装

Unity 权限 之 Android 【权限 动态申请】功能的简单封装 目录 Unity 权限 之 Android 【权限 动态申请】功能的简单封装 一、简单介绍 二、Android 权限 动态申请 三、实现原理 四、注意事项 五、案例实现简单步骤 附录&#xff1a; 一、进一步优化 二、多个权限申请…

第三方软件检测机构要具备哪些资质要求?专业测试报告如何申请?

第三方软件检测机构是独立于软件开发商和用户之外的公正机构&#xff0c;负责对软件进行全面的检测和评估。其独立性保证了评测结果的客观性和公正性&#xff0c;有效避免了软件开发商对自身产品的主观偏见和误导。 要成为一家合格的第三方软件检测机构&#xff0c;需要具备一…

网络编程——多进程的服务器

多进程的网络服务器 多进程的网络服务器是一种使用多个进程来处理并发网络请求的服务器架构。在这种架构中&#xff0c;服务器在接收到客户端连接请求后&#xff0c;会创建一个新的子进程来处理该请求&#xff0c;从而允许服务器同时处理多个客户端连接。多进程服务器通常用于…

OKR 实践:来自一位信息技术部主管的成功秘诀

OKR 实践&#xff1a;来自一位信息技术部主管的成功秘诀 为什么选择OKR 公司信息技术部为38个各地分公司、12,000名员工的IT需求提供服务。庞大而多样的客户群常常使我们的团队分散&#xff0c;许多团队都在各自为政&#xff0c;以个案为基础解决问题&#xff0c;而不是采用企业…

线上监控诊断利器:Arthas,你值得拥有

1. 引言 在现代软件开发中&#xff0c;线上监控和诊断是确保应用稳定性和性能的关键环节。然而&#xff0c;对于Java开发者来说&#xff0c;传统的监控工具往往难以深入到代码层面进行实时分析。这正是Arthas这一线上监控诊断工具大展身手的地方。本文将深入探讨Arthas&#x…

LabVIEW高低温试验箱控制系统

要实现LabVIEW高低温试验箱控制系统&#xff0c;需要进行硬件配置、软件设计和系统集成&#xff0c;确保LabVIEW能够有效地监控和控制试验箱的温度。以下是详细说明&#xff1a; 硬件配置 选择合适的试验箱&#xff1a; 确定高低温试验箱的型号和品牌。 确认试验箱是否支持外…

摸鱼大数据——Hive表操作——文件数据的导入和导出

数据导入和导出 1、文件数据导入 1.1 直接上传文件 window页面上传 需求: 已知emp1.txt文件在windows/mac系统,要求使用hdfs保存此文件 并且使用hivesql建表关联数据 use day06; ​ -- 1- 创建Hive表 create table emp1 (id int,name string,salary int,dept string )row for…

基于51单片机的汽车智能灯光控制系统

一.硬件方案 本设计硬件部分&#xff0c;中央处理器采用了STC89C52RC单片机&#xff0c;另外使用两个灯珠代表远近光灯&#xff0c;感光部分采用了光敏电阻&#xff0c;因为光敏电阻输出的是电压模拟信号&#xff0c;单片机不能直接处理模拟信号&#xff0c;所以经过ADC0832进…

基于python flask +pyecharts实现的气象数据可视化分析大屏

背景 气象数据可视化分析大屏基于Python Flask和Pyecharts技术&#xff0c;旨在通过图表展示气象数据的分析结果&#xff0c;提供直观的数据展示和分析功能。在当今信息化时代&#xff0c;气象数据的准确性和实时性对各行业具有重要意义。通过搭建气象数据可视化分析大屏&…

Vue 3 教程:入门指南

Vue 3 教程&#xff1a;入门指南 Vue 3 教程&#xff1a;入门指南 Vue 3 教程&#xff1a;入门指南引言1. 初始化项目2. 响应式数据使用 ref使用 reactive 3. 计算属性4. 侦听器5. 组合式 API6. 总结 引言 Vue.js 是一个用于构建用户界面的渐进式框架。Vue 3 引入了许多新的特…

Qt子线程更新UI的一种新玩法

目录 1. 说明2. 场景3. 子线程更新UI的方法3.1 一般做法3.2 新玩法 1. 说明 Qt不允许子线程直接操作主线程UI&#xff0c;推荐的做法是&#xff0c;子线程发送信号&#xff0c;主线程响应该信号。其最终的效果&#xff0c;依旧不是子线程直接操作主线程UI。 2. 场景 假设现在…

【kubernetes】关于k8s集群如何将pod调度到指定node节点(亲和与反亲和等)

目录 一、调度约束 1.1K8S的 List-Watch 机制 ⭐⭐⭐⭐⭐ 1.1.1Pod 启动典型创建过程 二、调度过程 2.1Predicate&#xff08;预选策略&#xff09; 常见的算法 2.2priorities&#xff08;优选策略&#xff09;常见的算法 三、k8s将pod调度到指定node的方法 3.1指定…