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

2025.3.1学习内容----网络编程

2025.3.2学习内容

网络编程

在这里插入图片描述

一 计算机网络基础知识

1.1 IP地址

在这里插入图片描述

IP:唯一标识网络上的每一台计算机

IP组成:32位,由4个8位二进制数组成

二进制不方便记忆,转变为十进制进行使用的

192.168.1.200

1.2 IP组成

IP共分为 A B C D E类

IP地址 = 网络地址 +主机地址

网络地址:标识计算机或网络设备所在的网段

主机地址:标识特定主机或网络设备

在这里插入图片描述

1.3 IP的配置及检测

查看IP地址,检测网络是否畅通

查看本机IP地址,win+r 输入cmd ,输入命令

ipconfig

去查询

测试网络是否通畅

ping  目标IP地址

DNS域名解析:DNS:Domain Name System,域名系统

将IP地址转换为域名

1.4网络服务器

在这里插入图片描述

二 Socket简介

2.1 什么是Socket?

Socket的底层机制复杂,Java平台提供了一些简单的API,可以更简单有效的使用Socket开发而无需了解底层机制

通信链路的端点就被称为“套接字”(英文名Socket)

是提供给应用程序的接口

2.2Socket编程

在这里插入图片描述

2.2.1Socket编程步骤

在这里插入图片描述

2.3 Socket编程代码示例
2.3.1 发送字符串

创建一个服务项目project_server,再创建一个客户端项目project_client

服务器端代码:

 public static void main(String[] args) {
        //1、创建服务器的端点对象
        try {
            ServerSocket serverSocket = new ServerSocket(5000);
            //2 、监听并接收客户端的socket请求
            Socket socket = serverSocket.accept(); //客户端
            //3、从socket中获取二进制输入流信息
            InputStream is = socket.getInputStream(); //字节流
            Reader reader = new InputStreamReader(is);
            BufferedReader br = new BufferedReader(reader);
            String line=null;
            while ((line=br.readLine())!=null){
                System.out.println("客户端说:"+line);
            }
            //服务器端给客户端的反馈
            OutputStream os = socket.getOutputStream();//输出流对象
            Writer writer=new OutputStreamWriter(os);
            BufferedWriter bw=new BufferedWriter(writer);
            String str="用户名和密码正确,欢迎登录!";
            bw.write(str);
            bw.flush();

            bw.close();
            writer.close();
            os.close();
//
            br.close();
            reader.close();
            is.close();
            socket.close();
            serverSocket.close();

        } catch (IOException e) {
            e.printStackTrace();
        }
    }

客户端代码:

 public static void main(String[] args) {
        // 登录场景:
        //1、客户端的端点
        try {
            Socket socket=new Socket("localhost",5000); //localhost代码本机
            OutputStream os = socket.getOutputStream();//输出流对象
            Writer writer=new OutputStreamWriter(os);
            BufferedWriter bw=new BufferedWriter(writer);
            String str="用户名:admin,密码:123456";
            bw.write(str);
            bw.flush();

            socket.shutdownOutput(); //停掉输出流
            //原因: 客户端要接收服务端的流信息,需要暂时停掉输出流
            //客户端接收
            InputStream is = socket.getInputStream(); //字节流
            Reader reader = new InputStreamReader(is);
            BufferedReader br = new BufferedReader(reader);
            String line=null;
            while ((line=br.readLine())!=null){
                System.out.println("服务说:"+line);
            }
            br.close();
            reader.close();
            is.close();
            //
            bw.close();
            writer.close();
            os.close();
            socket.close();

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
2.3.2 发送对象

在客户端与服务器端都创建一个User对象,实现Serializable接口

import java.io.Serializable;

public class User implements Serializable {
    private String userNo;
    private String userPwd;

    public User() {
    }

    public User(String userNo, String userPwd) {
        this.userNo = userNo;
        this.userPwd = userPwd;
    }

    public String getUserNo() {
        return userNo;
    }

    public void setUserNo(String userNo) {
        this.userNo = userNo;
    }

    public String getUserPwd() {
        return userPwd;
    }

    public void setUserPwd(String userPwd) {
        this.userPwd = userPwd;
    }
}

客户端代码:

 public static void main(String[] args) {
        try {
            Socket socket=new Socket("localhost",5001);
            OutputStream os = socket.getOutputStream();
            ObjectOutputStream oos=new ObjectOutputStream(os);
            User u1=new User("15386880458","123");
            oos.writeObject(u1);
            oos.flush();
            oos.close();
            os.close();
            socket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

服务器端代码:

 public static void main(String[] args) {

        try {
            ServerSocket serverSocket=new ServerSocket(5001);
            Socket socket = serverSocket.accept();
            InputStream is = socket.getInputStream();
            ObjectInputStream ois=new ObjectInputStream(is);
            Object object = ois.readObject();
            User user=(User)object;
            System.out.println("客户端发送的对象,账号是:"+user.getUserNo()+",密码是:"+user.getUserPwd());
            ois.close();
            is.close();
            socket.close();
            serverSocket.close();

        } catch (IOException | ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
2.3.3 多线程接收多客户端请求

服务器端创建线程类:

import java.io.*;
import java.net.InetAddress;
import java.net.Socket;

public class ClientThread extends Thread {
    private Socket socket; //声明一个Socket对象

    public ClientThread(Socket socket) {
        this.socket = socket;
    }

    @Override
    public void run() {
        try {
            InetAddress address = socket.getInetAddress(); //此对象可以获取客户端的IP地址
            String ip = address.getHostAddress(); //获取客户端的IP地址

            InputStream is = socket.getInputStream();
            Reader reader = new InputStreamReader(is);
            BufferedReader br = new BufferedReader(reader);
            String line = null;
            while ((line = br.readLine()) != null) {
                System.out.println(ip + "客户端:" + line);
            }
            br.close();
            reader.close();
            is.close();
            socket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        super.run();
    }
}

服务器端Main方法

 public static void main(String[] args) {
        try {
            ServerSocket serverSocket=new ServerSocket(8081);
            while (true){
                Socket socket = serverSocket.accept();
                //创建一个线程:线程中包含的代码是从socket中读取流信息
                ClientThread ct=new ClientThread(socket); //调用类的无参构造方法
                ct.start();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

客户端

public static void main(String[] args) {
        
        try {
            Socket socket=new Socket("localhost",8081); //localhost代码本机
            OutputStream os = socket.getOutputStream();//输出流对象
            Writer writer=new OutputStreamWriter(os);
            BufferedWriter bw=new BufferedWriter(writer);
            String str="你吃饭了吗?";
            bw.write(str);
            bw.flush();
            bw.close();
            writer.close();
            os.close();
            socket.close();

        } catch (IOException e) {
            e.printStackTrace();
        }
    }

相关文章:

  • 蓝桥杯 门牌制作
  • 儿童英语启蒙规划
  • 分布式拒绝服务(DDoS)攻击检测系统的设计与实现
  • LeetCode:132. 分割回文串 II(DP Java)
  • 《论数据分片技术及其应用》审题技巧 - 系统架构设计师
  • 入门大模型的学习路线是什么?
  • Rt-thread源码剖析(2)——时钟与定时器
  • CAN总线通信协议学习4——数据链路层之仲裁规则
  • DHCP配置实验
  • 企业建设——控制措施类型
  • 静态时序分中的case analysis传播分析
  • 迷你世界脚本世界UI接口:UI
  • react 编写一个待办事项,函数优化,组件传值
  • openssl下aes128算法gcm模式加解密运算实例
  • MyBatis-Plus 元对象处理器 @TableField注解 反射动态赋值 实现字段自动填充
  • logback日志输出配置范例
  • 基于第三方SDK的Windows平台全功能RTMP|RTSP直播播放器深度解析
  • C++20 中的 `consteval` 和 `constinit` 特性
  • Bash Shell 比较注入漏洞:分析与利用
  • 深入解析:域名转换成 IP 地址的多种方式
  • 懂做网站怎么赚钱/关键词有哪些?
  • 郑州美容网站建设/优化推广服务
  • 大型企业网站开发/aso优化软件
  • 制作团购网站/域名备案查询
  • 做网上任务赚钱的网站/微信营销案例
  • 电脑版网站制作公司/网站排名优化