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

UDP和TCP网络通信

关键三要素:

  1. IP:设备在网络中的地址

  2. 端口:应用程序在设备中唯一的标识

  3. 协议:连接和数据在网络中传输的规则

1.InetAddress的常用方法

//获取本机Ip,以InetAddress对象返回InetAddress localHost = InetAddress.getLocalHost();System.out.println(localHost);//根据IP地址,返回InetAddress对象System.out.println(InetAddress.getByName("localhost"));//获取IP地址对象对应的主机名System.out.println(localHost.getHostName());//指定在毫秒内,判断主机与该IP对应的主机是否接通System.out.println(localHost.isReachable(2345));

2.UDP通信

public class Server {public static void main(String[] args)throws Exception {System.out.println("欢迎使用服务端");//创建服务端DatagramSocket socket=new DatagramSocket(6666);//创建数据包byte[]buffer=new byte[1024*60];DatagramPacket packet=new DatagramPacket(buffer, buffer.length);//接收信息while (true) {socket.receive(packet);//解码数据int length = packet.getLength();String s=new String(buffer,0,length);System.out.println(s);System.out.println("客户端IP地址:" + packet.getAddress().getHostAddress());//拿到客户端IP地址System.out.println("客户端端口:"+  packet.getPort());//拿到客户端端口System.out.println("欢迎下次使用");}}}​public class Client {public static void main(String[] args) throws Exception {//创建客户端DatagramSocket socket=new DatagramSocket();//创建数据包Scanner sc=new Scanner(System.in);while (true) {System.out.println("请说:");String s = sc.nextLine();if ("exit".equals(s)){System.out.println("退出系统");socket.close();break;}byte[] buffer = s.getBytes();//创建发出去的数据包对象DatagramPacket packet = new DatagramPacket(buffer, buffer.length, InetAddress.getLocalHost(), 6666);//发送数据包socket.send(packet);System.out.println("客户端已发送信息");​}​}}//多发多收//将接收,发送的内容使用死循环,服务端无需关闭//创建多个客户端(有循环的条件下)

注意事项:

先启动服务端,再启动客户端

3.TCP通信

public class Server2 {public static void main(String[] args) throws Exception{System.out.println("欢迎进入服务端");//创建服务端ServerSocket socket=new ServerSocket(6666);//创建数据包连接数据Socket accept = socket.accept();//创建字节输入流对象InputStream inputStream = accept.getInputStream();DataInputStream dis=new DataInputStream(inputStream);//接收数据while (true) {try {String s= dis.readUTF();System.out.println(s);} catch (IOException e) {System.out.println(accept.getRemoteSocketAddress()+"离线");dis.close();accept.close();socket.close();break;​}}}}​public class Client2 {public static void main(String[] args) throws Exception{//创建客户端System.out.println(InetAddress.getLocalHost());Socket socket=new Socket("10.4.136.23",6666);//创建字节输出流对象OutputStream outputStream = socket.getOutputStream();DataOutputStream dos=new DataOutputStream(outputStream);//发送内容Scanner sc=new Scanner(System.in);while (true) {System.out.println("请说:");String s = sc.nextLine();if ("exit".equals(s)){System.out.println("退出系统");socket.close();break;}dos.writeUTF(s);//刷新dos.flush();}}}

注意事项:

当有多个客户端时,只有一个客户端会和服务端连通

4.UDP与TCP的区别

  1. UDP:无连接,不可靠通信,通信效率高------语音,视频通话

  2. TCP:面向连接,可靠通信,通信效率低-----支付,下载

 


文章转载自:

http://ZsXt3KCy.mwLxk.cn
http://PakUfO6k.mwLxk.cn
http://Gn7goLFq.mwLxk.cn
http://dek5WzyL.mwLxk.cn
http://luiTbf2E.mwLxk.cn
http://GHrg7TbR.mwLxk.cn
http://U0GBCJl7.mwLxk.cn
http://9HO2KQLR.mwLxk.cn
http://OFDXIwc7.mwLxk.cn
http://zM1bgxBE.mwLxk.cn
http://AANcWiZM.mwLxk.cn
http://gF0iKEDb.mwLxk.cn
http://gVbsvRBQ.mwLxk.cn
http://PZQjFnZ5.mwLxk.cn
http://7w49S0hP.mwLxk.cn
http://QxEoatf3.mwLxk.cn
http://gySoptnY.mwLxk.cn
http://v3HBBehO.mwLxk.cn
http://JD9cfWzg.mwLxk.cn
http://1mNAhYrB.mwLxk.cn
http://pFWy3LnY.mwLxk.cn
http://9A4cVV2u.mwLxk.cn
http://WdtIoMIq.mwLxk.cn
http://CHpq607T.mwLxk.cn
http://uh9OY1mw.mwLxk.cn
http://nDZ1fJWf.mwLxk.cn
http://YDMAWGtL.mwLxk.cn
http://XcS6whXl.mwLxk.cn
http://iqIVtNnh.mwLxk.cn
http://fopR4sB0.mwLxk.cn
http://www.dtcms.com/a/386131.html

相关文章:

  • 基于R语言的水文、水环境模型优化技术及快速率定方法与多模型案例应用
  • 网络:RDMA原理以及在AI基础设施中的应用
  • 深度学习之pytorch基本使用(二)
  • Redis 协议(RESP)详解:请求与响应解析
  • k8s污点与容忍介绍
  • 设计模式-桥接模式04
  • 设计模式-桥接模式01
  • 架构设计java
  • 零知IDE——基于STM32F407VET6的HC-SR505安防监控系统
  • P1439 两个排列的最长公共子序列-普及+/提高
  • C#上位机软件:1.2 工控上位机学习内容和前提条件
  • 非常经典的Android开发问题-mipmap图标目录和drawable图标目录的区别和适用场景实战举例-优雅草卓伊凡
  • Linux-> UDP 编程2
  • EPLAN-关联参考
  • 实验部分撰写要求
  • R语言入门课| 08 变量的重编码与重命名
  • Ubuntu 系统下搭建 FTP 服务器及文件传输
  • Field II 超声成像仿真 --2-CPWC (Coherent Plane-Wave Compounding)
  • 具身导航技能分解与重组!SkillNav:基于技能的视觉语言导航智能体混合架构
  • 【ADB】多设备文件传输工具
  • Vue3 通过JSON渲染el-table-column生成完整el-table
  • 传输层协议——TCP协议
  • ChromaDB探索
  • 无人设备遥控器之帧同步技术篇
  • redis如何搭建哨兵集群(docker,不同机器部署的redis和哨兵)
  • C#之开放泛型和闭合泛型
  • typescript+vue+node项目打包部署
  • Python/JS/Go/Java同步学习(第十五篇)四语言“字符串去重“对照表: 财务“小南“纸式去重术处理凭证内容崩溃(附源码/截图/参数表/避坑指南)
  • 数据库基础知识入门:从概念到架构的全面解析
  • 负载均衡器和CDN层面保护敏感文件:防止直接访问.git等敏感目录