Java 网络编程

网络编程:

在网络通信协议下,不同计算机上运行的程序,进行的数据传输。

常见软件架构:

BS(需浏览器)

CS(需下载客户端,远程有服务器端)

网络编程三要素:

1.IP:设备在网络中的地址,是唯一标识

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

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

IP:

IPv4:采用32位地址长度,分成4组,点分十进制表示法,2019年所有ip已经用完了

IPv6:采用128位地址长度,分成8组,冒分十六进制表示法

IPv4的地址分类:

公网地址(万维网使用)和私有地址(局域网使用)

特殊IP:

127.0.0.1(localhost)本机IP 本地回环地址

常见CMD:

ipconfig:查看本机IP地址

ping:检查网络是否连通

InetAddress的使用:

java 复制代码
import java.net.InetAddress;
import java.net.UnknownHostException;

public class sa {
    public static void main(String[] args) throws UnknownHostException {
        
        InetAddress aa = InetAddress.getByName("192.168.130.197");
        System.out.println(aa);

        String hostName = aa.getHostName();
        System.out.println(hostName);

        String hostAddress = aa.getHostAddress();
        System.out.println(hostAddress);
    }
}

端口号:

应用程序在设备中的唯一的标识。

由两个字节表示的整数,范围0~65535

一个端口号只能被一个应用程序使用

协议:

计算机网络中,连接和通信的规则称为网络通信协议。

UDP协议:

用户数据报协议,面向无连接,速度快。

java 复制代码
import java.io.IOException;
import java.net.*;

public class o {
    public static void main(String[] args) throws IOException {
        //发送数据

        //1.创建DatagramSocket对象
        DatagramSocket ds=new DatagramSocket();

        //2.打包数据
        String str="hello";
        byte[] bytes = str.getBytes();
        InetAddress address=InetAddress.getByName("127.0.0.1");
        int port=10086;

        DatagramPacket dp=new DatagramPacket(bytes,bytes.length,address,port);

        //3.发送数据
        ds.send(dp);

        //4.释放数据
        ds.close();

    }
}
java 复制代码
import java.io.IOException;
import java.net.*;

public class o {
    public static void main(String[] args) throws IOException {
        //接收数据

        //1.创建DatagramSocket对象
        DatagramSocket ds=new DatagramSocket(10086);

        //2.接收数据包
        byte[] bytes = new byte[1024];
        DatagramPacket dp=new DatagramPacket(bytes, bytes.length);
        ds.receive(dp);

        //3.解析数据包
        byte[] data = dp.getData();
        int len= dp.getLength();
        InetAddress address = dp.getAddress();
        int port=dp.getPort();

        System.out.println("接收到数据"+new String(data,0,len));
        System.out.println("该数据由"+address+"中的"+port+"端口运行出来");


        //4.释放资源
        ds.close();
    }
}

聊天室练习代码

java 复制代码
package nih;

import java.io.IOException;
import java.net.*;
import java.util.Scanner;

public class o1 {
    public static void main(String[] args) throws IOException {
        //发送数据

        //1.创建DatagramSocket对象
        DatagramSocket ds=new DatagramSocket();

        //2.打包数据
        Scanner sc=new Scanner(System.in);

        while(true){
            System.out.println("请输入:");
            String str= sc.nextLine();
            if("886".equals(str)){
                break;
            }
            byte[] bytes = str.getBytes();

            InetAddress address=InetAddress.getByName("127.0.0.1");
            int port=10086;

            DatagramPacket dp=new DatagramPacket(bytes,bytes.length,address,port);

            //3.发送数据
            ds.send(dp);

        }

        //4.释放数据
        ds.close();

    }
}
java 复制代码
package nih;

import java.io.IOException;
import java.net.*;

public class o {
    public static void main(String[] args) throws IOException {
        //接收数据

        //1.创建DatagramSocket对象
        DatagramSocket ds=new DatagramSocket(10086);

        //2.接收数据包
        byte[] bytes = new byte[1024];
        DatagramPacket dp=new DatagramPacket(bytes, bytes.length);
        while (true){
            ds.receive(dp);

            //3.解析数据包
            byte[] data = dp.getData();
            int len= dp.getLength();
            InetAddress address = dp.getAddress();
            int port=dp.getPort();

            System.out.println("接收到数据"+new String(data,0,len));
            System.out.println("该数据由"+address+"中的"+port+"端口运行出来");
        }
    }
}

UDP的三种通信方式:

  1. 单播(上面写的都是)

2.组播

MulticastSocket

3.广播

改成''255.255.255.255''

TCP协议:

传输控制协议,面向连接,速度慢。

通过Socket产生IO流来进行网络通信。

java 复制代码
package nih;

import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;

public class Client {
    public static void main(String[] args) throws IOException {
        //发送

        //1.创建Socket对象
        Socket s=new Socket("127.0.0.1",10000);

        //2.可以从连接通道中获取输出流
        OutputStream outputStream = s.getOutputStream();
        //写出数据
        outputStream.write("hello".getBytes());

        //3.释放资源
        outputStream.close();
        s.close();
    }
}
java 复制代码
package nih;

import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {
    public static void main(String[] args) throws IOException {
        //接收数据

        //1.创建ServerSocket
        ServerSocket ss=new ServerSocket(10000);

        //2.监听客户端的链接
        Socket accept = ss.accept();

        //3.从连接通道中获取输入流读取数据
        InputStream inputStream = accept.getInputStream();
        int b;
        while ((b=inputStream.read())!=-1){
            System.out.println((char) b);
        }

        //4.释放资源
        inputStream.close();
        ss.close();
    }
}

TCP通信三次握手:

保证连接建立

TCP通信四次挥手:

确保连接断开,且数据处理完毕

相关推荐
大树888 小时前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠8 小时前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质8 小时前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
小宇宙Zz8 小时前
Maven依赖冲突
java·服务器·maven
Inhand陈工9 小时前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
酣大智9 小时前
ARP代理--工作原理
运维·网络·arp·arp代理
shushangyun_10 小时前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化
古城小栈10 小时前
Unix 与 Linux 异同小叙
linux·服务器·unix
施努卡机器视觉10 小时前
SNK施努卡侧滑门锁上滑轮总成自动化装配线,从零件到组件,全流程精密制造方案
运维·自动化·制造
程序猿阿伟10 小时前
《Chrome离线扩展安装的底层逻辑与场景落地指南》
服务器·网络·chrome