网络相关概念
网络通信
概念:通过网络,将数据从一台设备传输到另一台设备
在java中,网络通信一般用java.net这个包的类和接口
网络
概念:两台或多台设备通过物理设备连接起来的网,叫做网络
根据网络覆盖范围不同,可做以下分类
局域网:覆盖范围最小,仅仅覆盖一个教室或者一个机房
城域网:覆盖范围较大,可以覆盖一个城市
广域网:覆盖范围最大,可以覆盖一个国家,甚至全球,万维网就是典型代表
IP地址
概念:IP地址是指互联网协议地址,又译为网际协议地址。IP地址是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异。一台计算机对应一个唯一的Ip地址
IP地址可以在ipconfig中查看
IP地址的表示形式(点分十进制):XX.XX.XX.XX(网络地址 + 主机地址)
这相当于四个字节,每个XX最多表示到255
域名
IP地址一堆数字,难以记忆,所以我们发明了域名,域名是通过网域名称系统,由ip地址映射而来的,相当于IP地址的助记符
端口号
概念:所谓的端口,就好像是门牌号一样,客户端可以通过ip地址找到对应的服务器端,但是服务器端是有很多端口的,每个应用程序对应一个端口号,通过类似门牌号的端口号,客户端才能真正的访问到该服务器。为了对端口进行区分,将每个端口进行了编号,这就是端口号
形式:应用程序:XXXX(端口范围0~65535,即两个字节0~2^16-1)
注意:0~1024端口号已被占用,在开发时不要用到这些端口号
socket(套接字)
1.通信的两端都要有socket,这时两台机器通信的端点,所以可以说网络通信就是socket的通信
2.一般主动发起通信的应用程序属于客户端(client),等待通信请求的属于服务端(server),Socket是客户端套接字,是ServerSocket类实现了服务器套接字
注意,当客户端想要连接一个服务端时,必须要保证服务端已经是开启了socket
3.socket允许把网络连接当成一个流,数据在两个socket间通过IO流传输
socket.getOutputStream(),socket.getInputStream(),若socket有相关联的通道,这两个方法得到的输出输入流的所有操作也会关联该通道
4.sokect能连接的数量有限,所以用完一个要关闭一个
UDP网络编程
举个例子
现在要求test2端发个信息告诉test1今晚要吃火锅,test1收到后要做个回复给test2
public class Test1 { public static void main(String[] args) throws Exception { DatagramSocket datagramSocket = new DatagramSocket(9999); byte[] b = new byte[1024]; DatagramPacket datagramPacket = new DatagramPacket(b, b.length); datagramSocket.receive(datagramPacket); //拆包 int len = datagramPacket.getLength(); byte[] data = datagramPacket.getData(); System.out.println(new String(data, 0, len)); datagramPacket = new DatagramPacket("好的,明天见".getBytes(), "好的,明天见".getBytes().length, InetAddress.getLocalHost(), 9998); datagramSocket.send(datagramPacket); datagramSocket.close(); } } public class Test2 { public static void main(String[] args) throws Exception { DatagramSocket datagramSocket = new DatagramSocket(9998); byte[] b = new byte[64 * 1024]; DatagramPacket datagramPacket = new DatagramPacket("今晚吃火锅".getBytes(), "今晚吃火锅".getBytes().length, InetAddress.getLocalHost(), 9999); datagramSocket.send(datagramPacket); datagramSocket.receive((datagramPacket = new DatagramPacket(b, b.length))); //拆包 int len = datagramPacket.getLength(); byte[] data = datagramPacket.getData(); System.out.println(new String(data, 0, len)); datagramSocket.close(); }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?