网络相关概念

网络通信

概念:通过网络,将数据从一台设备传输到另一台设备

在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();
    }
复制代码

 

posted @   codemelo  阅读(284)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示