当前位置: 首页 > news >正文

Java学习日记——DAY23

今天我针对Java网络编程展开了学习,学习内容如下:

1.OSI(开放式系统互连)七层模型:

物理层:传输原始二进制比特流,常见设备如:双绞线、光纤、集线器、中继器;

数据链路层:在同一局域网内提供可靠的数据帧传输,处理物理地址,差错检验;

网络层:负责逻辑寻址和路由选择(决定数据包如何从源目的跨网络传输),IP;

传输层:提供端到端的可靠或不可靠传输、负责流量控制、错误检测与恢复,UDP、TCP;

会话层:建立管理和终止对话;

表示层:完成数据的格式转换、加密解密、压缩解压(确保不同系统间能理解数据);

应用层:为用户提供网络服务接口;

2.TCP/IP

指能够在多个不同网络间实现信息传输的协议簇。TCP/IP不仅指TCPIP两个协议,而是指一个由FTP、SMTP、TCPUDPIP等协议构成的协议簇。对互联网中各部分进行通信的标准和方法进行规定。是保证网络数据信息及时、完整传的重要协议。
TCP/IP是一个四层的体系结构:应用层+传输层+网络层+物理、数据链路层;
3.传输层协议:
UDP协议:一个无连接的传输协议,称为用户数据报协议,无需建立连接就可以发送封装IP数据包的方法;
协作比较简单,实现容易,但是没有确认机制,无法确认到对方是否收到,可靠性较差,但效率比较高,包含报头数据最大长度为64K;
TCP协议:是面向连接的、可靠的、基于字节流的通信协议。是一种有确认机制的协议,每发出一个数据包都要求确认,如果有一个数据包丢失,接收方不会进行确认,发送方就必须要重新发送这个数据包。
TCP的三次协议:
主要为了确认四件事:客户端的发送正常,客户端的接收正常,服务端的发送正常,客户端的接收正常;
第一次握手:客户端提出的,可以理解为客户端向服务端发出一个短信,服务端接收后确定了服务端的接收功能正常;
第二次握手:服务端提出的,可以理解为服务端向客户端发出一个短信,客户端接收后确定了客户端的接收和发送能力正常;
第三次握手:客户端提出的,可以理解为客户端向服务端发出一个短信,服务端接收后确定了服务端的发送能力正常;
4.网络编程三要素:
(1)协议:计算机网络为了进行数据交换而建立的各种规则,标准或约定的集合;
(2)IP地址:互联网协议地址;
(3)端口号:用于确定某一计算机的具体服务;
5.网络开发的两种模式:
C/S模式:客户端/服务器模式,合理分配任务给客户端和服务端,降低了系统的通讯开销,充分利用两端硬件环境优势;
B/S模式:浏览器/服务器模式,将系统核心全部集中到服务器上,简化系统开发维护和使用;
6.Socket套接字

基于TCP实现聊天服务:

public class Test1 { public static void main(String[] args) throws IOException { ServerSocket serverSocket = new ServerSocket(1235); System.out.println("等待客户端连接中..."); Socket socket = serverSocket.accept(); System.out.println("成功连接客户端..."); OutputStream outputStream = socket.getOutputStream(); PrintWriter printWriter = new PrintWriter(outputStream); Scanner scanner = new Scanner(System.in); InputStreamReader inputStreamReader = new InputStreamReader(socket.getInputStream()); BufferedReader bufferedReader = new BufferedReader(inputStreamReader); System.out.println("请输入内容:"); String line; while(true){ line = scanner.nextLine(); printWriter.println(line); printWriter.flush(); if("bye".equals(line)){ break; } line = bufferedReader.readLine(); System.out.println("[客户端]:"+line); if("bye".equals(line)){ break; } } bufferedReader.close(); printWriter.close(); socket.close(); serverSocket.close(); } } public class Test2 { public static void main(String[] args) throws IOException { Socket socket = new Socket("localhost",1235); System.out.println("客户端连接"); InputStream is = socket.getInputStream(); InputStreamReader isr = new InputStreamReader(is); BufferedReader br = new BufferedReader(isr); OutputStream os = socket.getOutputStream(); PrintWriter pw = new PrintWriter(os); Scanner sc = new Scanner(System.in); while(true){ String line = br.readLine(); System.out.println("[服务端]:"+line); if("bye".equals(line)){ break; } line = sc.nextLine(); pw.println(line); pw.flush(); if("bye".equals(line)){ break; } } br.close(); pw.close(); socket.close(); } }

基于UDP实现消息快报:

public class Test5 { public static void main(String[] args) throws IOException { DatagramSocket socket = new DatagramSocket(1234); Scanner in = new Scanner(System.in); String str = in.nextLine(); byte[] data = str.getBytes(); DatagramPacket packet =new DatagramPacket(data,0,data.length, InetAddress.getByName("localhost"),1235); socket.send(packet); socket.close(); } } public class Test6 { public static void main(String[] args) throws IOException { DatagramSocket socket = new DatagramSocket(1235); byte[] buf = new byte[1024]; DatagramPacket packet = new DatagramPacket(buf, buf.length); socket.receive(packet); String data = new String(buf, 0, packet.getLength(), StandardCharsets.UTF_8); System.out.println(data); socket.close(); } }

URL同一资源定位符:

public class Test7 { public static void main(String[] args) throws IOException { URL url = new URL("https://inews.gtimg.com/om_bt/Ojkpad4ytS_JDeu___pZIxZ50fz1ISSAl4AH6PShWSFmYAA/641"); URLConnection con = url.openConnection(); BufferedInputStream bis = new BufferedInputStream(con.getInputStream()); BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("tu.jpg")); byte[] buf = new byte[1024]; int len; while((len = bis.read(buf)) != -1) { bos.write(buf, 0, len); } bos.flush(); bos.close(); bis.close(); } }public class Test8 { public static void main(String[] args) throws IOException { URL url = new URL("https://news.qq.com/rain/a/20260211A0306900"); URLConnection conn = url.openConnection(); BufferedInputStream bis = new BufferedInputStream(conn.getInputStream()); BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("tu.html")); byte[] buf = new byte[1024]; int len; while ((len = bis.read(buf)) != -1) { bos.write(buf, 0, len); } bos.flush(); bos.close(); bis.close(); } }

学习内容如上,如有错误或者意见请评论讨论。

http://www.jsqmd.com/news/373039/

相关文章:

  • 超越静态图表:Python数据可视化组件的深度探索与现代实践
  • 读人工智能全球格局:未来趋势与中国位势02深度学习
  • 记调试 RX-Explorer-WAS 文件管理器 UI 未响应问题
  • 高手的直觉:当深度反思,凝结为瞬间的洞察
  • 2.2 任务一复杂就乱 学会拆任务和动态调整
  • 2.3 短期记对话长期存向量 Agent的记忆怎么设计
  • 1.7 新商业模式长什么样 AIA即服务多Agent具身智能
  • 2.1 四大件 规划记忆工具执行缺一不可
  • 1.6 真实案例 客服推荐医疗里Agent已经省了多少钱
  • 1.5 Agent的手 会说话会调API才算真干活
  • 如何选择内网部署的项目管理软件?2026年8款主流软件测评
  • 13款任务管理软件对比测评:谁更适合研发?谁更适合跨部门?
  • 嘉立创EDA:用网络标签表示导线连接
  • 市场如期缩量,留给你的时间不多
  • MATLAB基于遗传-灰狼优化算法的绿色低碳停机位分配
  • 当预算成为战略的边界——管会视角复盘大英帝国对北美SBU的“战略剥离”案
  • Seedance 2.0 之后,品牌内容生产正在进入“系统化原创时代”
  • [拆解LangChain执行引擎] Channel——驱动Node执行的原力
  • UDP原理和极简socket编程demo
  • 【pySLAM】pySLAM
  • 面向对象高级三
  • LeetCode热题100--42. 接雨水--困难
  • 【无标题】具身智能的长期任务规划与记忆机制
  • 2026年漯河旧房翻新攻略:如何甄选正规靠谱的施工团队? - 2026年企业推荐榜
  • VBA即用型代码手册:设置表格内的字体Set the font in the table
  • 2026年2月漯河高性价比装修实力公司综合评测 - 2026年企业推荐榜
  • 2026年漯河旧房翻新市场深度解析与TOP施工团队权威推荐 - 2026年企业推荐榜
  • 2026年三峡人家旅行社综合服务实力深度评测与选型指南 - 2026年企业推荐榜
  • 对话机器人架构演进:从状态机到神经符号混合系统的组件化实践
  • 宜兴MVR蒸汽压缩机品牌综合实力TOP5盘点(2026版) - 2026年企业推荐榜