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

java 网络编程

java 网络编程

1.0 基本通信架构

基本的通信架构有两种,一种是CS架构,即客户端服务端架构,另一种是BS架构,即浏览器服务端架构

1.1 ip地址

java 中使用InetAddress 代表ip地址,常用的方法有:

image-20250727213018883

下面是方法使用

package com.net.test;import java.net.InetAddress;
import java.net.UnknownHostException;public class IpTest {public static void main(String[] args) throws Exception {InetAddress ip=InetAddress.getLocalHost();System.out.println(ip.getHostAddress());//获得ip地址System.out.println(ip.getHostName());//获得主机名InetAddress.getByName("baidu.com");//根据ip地址或者域名获得InetAddress对象System.out.println();//判断当前书籍是否可以和当前对象对应的服务器联通,传入的时间为连接尝试时间,单位为毫秒System.out.println(ip.isReachable(1000));System.out.println();}
}

1.2 端口

端口是程序进行网络通信的出入口,被规定为一个16位的二进制,范围是0-65535

分类:

周知端口:0-1023 被预先定义的指明应用占用

注册端口:1024-49151 分配给用户进程或者某些应用程序

动态端口: 49152 到65535 动态进行分配

我们自己的程序一般使用注册端口

一个设备中不能出现两个使用同一端口的程序

1.3 UDP通信

在java中,使用DatagramSocket进行udp通信

image-20250727223655766

image-20250727223736184

image-20250727223808467

下面是UDP通信中创建客户端并发送数据的例子

客户端

package com.net.test;import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;public class Client {public static void main(String[] args) throws Exception {DatagramSocket client=new DatagramSocket();byte [] data= "hello".getBytes();DatagramPacket packet=new DatagramPacket(data,data.length,InetAddress.getLocalHost(),6666);client.send(packet);System.out.println("发送完毕");client.close();}
}

其中DatagramPacket 是我们要存储数据的数据包对象 其中有参构造函数的几个参数在这里进行解释:

第一个参数是一个字节数组,存储着我们要发送的数据

第二个参数是数据发送长度,代表着我们要将第一个字节数组的多少数据发送给对方

第三个参数是一个InetAddress对象,代表我们发送数据的对象,我们可以用InetAddress.getByName方法获得

目标对象

第四个参数是我们发送的端口,有了对象我们要指明发送给对象的哪个端口

定义完成后使用send方法发送数据包

服务端:

package com.net.test;import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;public class Server {public static void main(String[] args) throws Exception {DatagramSocket server = new DatagramSocket(6666);byte [] data= new byte[1024*64];//UDP发送数据一次最大64KBDatagramPacket packet = new DatagramPacket(data,data.length);server.receive(packet);String rs=new String(data,0,packet.getLength());System.out.println(rs);System.out.println(packet.getAddress());System.out.println(packet.getPort());server.close();}
}

这是一个构建服务端的简单程序,现在进行解释,首先通过DatagramSoket 对象代表服务端,不过这时候要指定

端口了,不能再随机分配,因为之前客户端的端口是指定了发送给目标ip的指定端口了,接着创建字节数组来接受

数据,创建DatagramPacket来接受数据包,字节数组用来接受传输的数据,DatagramPacket不光需要接受传输

的数据,还需要接受发送过来的附加信息,比如发送客户端的ip地址,端口等信息,我们再客户端发送

DatagramPacket也是一样的原因,可以看到我们后续的就用到了附加的信息

当我们启动服务端时,在遇到 server.receive(packet); 时产生阻塞,直到接受到数据后才继续执行

执行的输出结果

hello
/198.18.0.1
51573
http://www.wuyegushi.com/news/823.html

相关文章:

  • systemd 的unit配置文件里[Service]里的WorkingDirectory有什么用,如何配置
  • Python实现验证码识别:图像预处理 + Tesseract OCR 实战
  • 一些未来的思考
  • 学习之道 反思 记忆
  • Reference
  • 学习之道 反思 自信
  • 博弈论 冯 诺伊曼
  • Moq 的使用
  • InnoDB架构
  • 离线安装node.js node-red,及设置为服务注意事项
  • 北航操作系统上机实验使用vscode指南
  • Go 实现图像预处理 + OCR 的验证码识别流程
  • 7.27随笔
  • 实现图像预处理 + OCR 的验证码识别流程
  • 当 think 遇上 tool:深入解析 Agent 的规划之道
  • nonono
  • 2025.7.27学习日记
  • PG系列:PG数据库中分析操作系统IO是否正常
  • 【音频硬件相关】喇叭的阻值——了解阻抗:万用表测喇叭,测的是什么?
  • 【音频硬件相关】常见的模拟输出的硅麦
  • 免费SANS网络研讨会:IOC优先级评估与事件响应决策
  • 使用Amazon Bedrock和Amazon Transcribe构建AI驱动的自动化会议摘要系统
  • 【音频硬件相关】喇叭上的阻值和功率
  • 十木轻创:卖虚拟资料哪个平台好?小红书做这 5 个小项目,宝妈网上也能创业
  • 第二十二天
  • 十木轻创:有人偷偷挣了5.7个!干货全在这里。如何靠手机壁纸创收
  • 熔断降级(Go语言实现)
  • Vue + Node.js 全栈开发实战:构建现代化前端应用
  • Go语言的plugin
  • PandasAI连接LLM进行智能数据分析