Java中网络编程的相关知识点

一、网络编程的基本要素

IP地址+端口号+协议

  • IP地址就是指服务器的IP 也就是定位此服务器的标识(本机的IP地址是127.0.0.1)
  • 端口号值的是该IP地址的服务器的哪一个端口与客户端或者浏览器进行连接,通过IP地址+端口号就可以确定这台服务器的对外接口
  • 协议 通俗来说就是规定了与该服务器连接时的标准,因为全世界的计算机数量是很庞大的数目,所有计算机一起组成了互联网,如果没有一套标准的话,不同计算机连接的效率会很差。

二、通信协议

目前的通信协议分为两种,分别是TCP协议和UDP协议

TCP协议(传输控制协议)

TCP协议最重要的知识点是三次握手:

  1. 第一次握手时 客户端向服务器发送连接请求 等待服务器确认
  2. 第二次握手时 服务器接收到客户端的请求后,向客户端发送一个响应,通知客户端已接收到请求
  3. 第三次握手时 客户端再次向服务器发送消息,确认连接

UDP协议(用户数据报协议)

是一个面向无连接的协议,也就是说不管对方是否能不能收到,客户端都会单纯的发送
64kb以内

网络编程的分类

  • B/S程序:浏览器与服务器 程序
  • C/S程序:客户端与服务器 程序

实例操作:

package com.jiansheng.TCP_Thread;

import java.io.Serializable;
import java.util.Objects;

/**
 * @author Jiansheng
 */
public class AccountBean implements Serializable {
    private String account;
    private String password;

    public AccountBean(String account, String password) {
        this.account = account;
        this.password = password;
    }

    public AccountBean() {
    }

    public String getAccount() {
        return account;
    }

    public void setAccount(String account) {
        this.account = account;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @Override
    public String toString() {
        return "AccountBean{" +
                "account='" + account + '\'' +
                ", password='" + password + '\'' +
                '}';
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        AccountBean that = (AccountBean) o;
        return Objects.equals(account, that.account) &&
                Objects.equals(password, that.password);
    }
}

package com.jiansheng.TCP_Thread;

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

/**
 * @author Jiansheng
 */
public class Servlet {
    public static void main(String[] args) throws IOException, ClassNotFoundException {
        //搭建服务器
        ServerSocket ss = new ServerSocket(55566);
        //等待客户端的连接
        System.out.println("服务器已经启动,正在等待客户端的连接:");
        while(true){
            Socket sc = ss.accept();
            new Thread(new MyRunnalbe(sc)).start();
        }
    }

}

class MyRunnalbe implements Runnable{

    Socket sc = null;
    public MyRunnalbe(Socket sc){
        super();
        this.sc = sc;
    }

    @Override
    public void run() {
        //获取用户端发送的消息并进行序列化操作
        InputStream ips = null;
        try {
            ips = sc.getInputStream();
        } catch (IOException e) {
            e.printStackTrace();
        }
        ObjectInputStream is = null;
        try {
            is = new ObjectInputStream(ips);
        } catch (IOException e) {
            e.printStackTrace();
        }
        //创建对象接收输入
        AccountBean ab = null;
        try {
            ab = (AccountBean) is.readObject();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }

        if ("admin".equals(ab.getAccount()) && "abc".equals(ab.getPassword())){
            OutputStream os = null;
            try {
                os = sc.getOutputStream();
            } catch (IOException e) {
                e.printStackTrace();
            }
            PrintStream ps = new PrintStream(os);
            ps.println("登陆成功,管理员您好。");
        }else if ("user".equals(ab.getAccount()) && "123".equals(ab.getPassword())){
            OutputStream os = null;
            try {
                os = sc.getOutputStream();
            } catch (IOException e) {
                e.printStackTrace();
            }
            PrintStream ps = new PrintStream(os);
            ps.println("登陆成功,用户您好。");
        }else {
            OutputStream os = null;
            try {
                os = sc.getOutputStream();
            } catch (IOException e) {
                e.printStackTrace();
            }
            PrintStream ps = new PrintStream(os);
            ps.println("登陆失败,请检查您的用户名和密码。");
        }
    }
}

package com.jiansheng.TCP_Thread;

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

/**
 * @author Jiansheng
 */
public class Client {
    public static void main(String[] args) throws IOException {
        while (true) {
            //定义用户输入
            Scanner input = new Scanner(System.in);
            System.out.println("请输入您的账号:");
            String account = input.nextLine();
            System.out.println("请输入您的密码:");
            String password = input.nextLine();
            //将用户输入存入AccountBean对象中
            AccountBean ab = new AccountBean(account, password);
            //创建Socket对象进行连接
            Socket sc = new Socket("localhost", 55566);
            //创建连接流
            OutputStream ops = sc.getOutputStream();
            //将AccountBean对象放到连接流里
            ObjectOutputStream oos = new ObjectOutputStream(ops);
            oos.writeObject(ab);

            //客户端接收服务器返回的消息
            InputStream ips = sc.getInputStream();
            BufferedReader br = new BufferedReader(new InputStreamReader(ips));
            String s = br.readLine();
            System.out.println(s);
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java编程是一种流行的面向对象编程语言,具有广泛的应用领域,因此掌握Java编程的基础知识对于程序员来说至关重要。以下是Java编程基础知识点的汇总及习题集: 1. 数据类型和变量:Java有基本数据类型和引用数据类型,如int、double、boolean和String等。掌握数据类型的定义和变量的声明与初始化是基础的基础。 2. 运算符和表达式:Java的运算符包括算术运算符、关系运算符、逻辑运算符等,了解它们的使用方法和优先级是编程的基本要求。 3. 控制流程:掌握条件语句(if-else语句、switch语句)和循环语句(for循环、while循环、do-while循环)的使用,能够正确地控制程序的执行流程。 4. 数组和集合:了解数组和集合的定义和基本操作,包括数组和集合的遍历、增删改查等操作,是进行数据处理必不可少的知识。 5. 方法和函数:掌握方法的定义和调用,了解方法的参数和返回值的使用,能够模块化地编写代码。 6. 面向对象编程:理解面向对象编程的基本概念,包括类和对象的定义、封装、继承和多态等特性。 7. 异常处理:了解异常的概念和处理方法,能够编写健壮的程序并处理异常情况。 通过对以上知识点的掌握和练习,可以帮助程序员建立起扎实的Java编程基础,为进一步深入学习和应用Java编程打下坚实的基础。通过多做习题,可以提高自己的编程能力,加深对知识点的理解。因此,建议对以上知识点进行反复练习,并不断实践和查漏补缺,才能真正掌握Java编程的基础知识。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值