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

Java基础:网络编程UDPTCP详解

概述

什么是网络编程?

在这里插入图片描述

Java中提供解决方案

在这里插入图片描述

基本通信架构CS/BS

在这里插入图片描述
在这里插入图片描述

通信三要素

在这里插入图片描述
在这里插入图片描述

IP地址-InetAddress

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

InetAddress

在这里插入图片描述

// 目标:
// 1.获取本机ip对象
InetAddress ip = InetAddress.getLocalHost();
System.out.println(ip.getHostAddress());
System.out.println(ip.getHostName());// 2.获取指定ip对象
InetAddress ip2 = InetAddress.getByName("www.baidu.com");
System.out.println(ip2.getHostAddress());
System.out.println(ip2.getHostName());// 3.判断本机与改主机是否联通:ping
boolean reachable = ip2.isReachable(5000);// 可做预警
System.out.println(reachable);

端口号

在这里插入图片描述

2协议UDP/TCP

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

UDP

UDP通信

在这里插入图片描述

DatagramSocket

在这里插入图片描述
在这里插入图片描述

public class Server {public static void main(String[] args) throws Exception {// 目标:服务端// 1.创建接收端DatagramSocket socket = new DatagramSocket(8888);// 2.创建数据包对象(接收数据)byte[] bytes = new byte[1024*64];DatagramPacket packet = new DatagramPacket(bytes, bytes.length);// 3.接收数据(接收韭菜)socket.receive(packet);// 4.把数据输出// 获取本轮传输的数据多少字节int len = packet.getLength();String msg = new String(bytes, 0 , len);System.out.println(msg);// 获取发送端的ip地址与端口InetAddress ip = packet.getAddress();int port = packet.getPort();System.out.println(ip.getHostAddress() + ":" + port);// 5.关闭资源socket.close();}
}
public class Client {public static void main(String[] args) throws Exception {// 目标:客户端// 1.创建发送对象DatagramSocket socket = new DatagramSocket();// 2.创建数据包对象String msg = "你好,我是客户端";byte[] data = msg.getBytes();DatagramPacket packet =new DatagramPacket(data, data.length, InetAddress.getLocalHost(), 8888);// 3.发送数据socket.send(packet);// 4.关闭资源socket.close();}
}

UDP多发多收

TCP

TCP通信

在这里插入图片描述

Socket

在这里插入图片描述
在这里插入图片描述

/*** 目标:完成TCP通信:实现1发1收*/
public class Client {public static void main(String[] args) throws Exception {System.out.println("客户端启动成功!!!");// 1.创建客户端对象Socket socket = new Socket("127.0.0.1", 8888);// 2.从通信管道中获取字节输出流,用来发送数据给服务器OutputStream os = socket.getOutputStream();// 3.把低级输出流转为数据输出流DataOutputStream dos = new DataOutputStream(os);dos.writeUTF("在一起,好吗?");dos.close();// 4.释放资源socket.close();}
}
/*** 目标:TCP服务端开发*/
public class Server {public static void main(String[] args) throws Exception {System.out.println("服务端启动成功!!!");// 1.创建一个服务器对象,绑定8888端口ServerSocket ss = new ServerSocket(8888);// 2.等待客户端连接Socket socket = ss.accept();// 3.从通信管道中获取字节输入流,读取数据InputStream is = socket.getInputStream();// 4.把字节输入流包装成字符输入流DataInputStream dis = new DataInputStream(is);// 5.读取数据String msg = dis.readUTF();System.out.println(msg);// 获取客户端信息System.out.println(socket.getRemoteSocketAddress());// 关闭资源dis.close();socket.close();}
}

TCP多发多收

在这里插入图片描述

TCP同时接收多个客户端(多线程)

在这里插入图片描述
在这里插入图片描述

相关文章:

  • Vite vs Webpack 优势对比
  • 车载信息安全架构 --- 汽车网络安全
  • 基于GA遗传优化TCN-BiGRU注意力机制网络模型的时间序列预测算法matlab仿真
  • 穿越链路的旅程:深入理解计算机网络中的数据链路层
  • WebSocket是h5定义的,双向通信,节省资源,更好的及时通信
  • 栈和队列学习记录
  • 【playwright】学习--持续汇总
  • onlyoffice历史版本功能实现,版本恢复功能,编辑器功能实现 springboot+vue2
  • 视频监控从安装到优化的技术指南,视频汇聚系统EasyCVR智能安防系统构建之道
  • 高并发下单库存扣减异常?飞算 JavaAI 自动化生成分布式事务解决方案
  • 使用Python创建带边框样式的Word表格
  • HTML+CSS对角背景变色
  • C# 中的 `lock` 关键字本质
  • Saas、Paas、Faas、Baas的概念学习与对比
  • 精益数据分析(18/126):权衡数据运用,精准把握创业方向
  • 前端js需要连接后端c#的wss服务
  • 【3】CICD持续集成-k8s集群中安装Jenkins-agent(主从架构)
  • 【自然语言处理与大模型】大模型参数规模与部署配置调查2025第一季度
  • [特殊字符] 大模型对话风格微调项目实战——模型篇 [特殊字符]✨
  • 深度解析:透过十问十答洞悉大模型SFT的应用策略
  • 上海常务副市长:持续提升跨境投融资便利化水平,稳步扩大金融领域的制度型开放
  • 我国已顺利实施20次航天员出舱活动,达到国际先进水平
  • 从香料到文化,跟着陈晓卿寻味厦门
  • 举报人不服相关部门奖励“缺斤少两”,两地分别作出再认定
  • 山东省淄博市委原常委宋振波被“双开”
  • 电影“名场面”被制成表情包在网站上传播,网站运营者被判赔5500元