网络编程的学习

网络编程

七层网络模型

在这里插入图片描述

相关的协议(笔试题)

  1. 协议的概念
    计算机在网络中实现通信就必须有一些约定或者规则,这种约定和规则就叫做通信协议,通信协议可以对速率、传输代码、代码结构、传输控制步骤、出错控制等制定统一的标准。

  2. TCP协议
    传输控制协议,是一种面向连接的协议,类似于打电话
    在这里插入图片描述

  3. UDP协议

用户数据报协议,是一种非面向连接的协议,类似于写信
在这里插入图片描述

IP地址

  • 192.168.1.1 - 是绝大多数路由器的登录地址,主要配置用户名和密码以及Mac过滤
  • IP地址是互联网中的唯一地址标识,本质上是由32位二进制组成的整数,叫做IPv4,当然也有128位二进制组成的整数,叫做IPv6,目前主流的还是IPv4
  • 日常生活中采用点分十进制表示法来进行IP地址的描述,将每个字节的二进制转化为一个十进制整数,不同的整数之间采用小数点隔开。
  • 如:
    0x01020304 => 1.2.3.4
  • 查看IP地址的方式:
    Windows系统:在dos窗口中使用ipconfig或ipconfig/all命令即可
    Unix/linux系统:在终端窗口中使用ifconfig或/sbin/ifconfig命令即可
  • 特殊的地址
    本地回环地址(hostAddress):127.0.0.1 主机名(hostName):localhost

端口号

  • IP地址 - 可以定位到具体某一台设备。
  • 端口号 - 可以定位到该设备中具体某一个进程。
  • 端口号本质上是16位二进制组成的整数,表示范围是:0 ~ 65535,其中0 ~ 1024之间的端口号通常被系统占用,建议编程从1025开始使用。
  • 特殊的端口:
    HTTP:80 FTP:21 Oracle:1521 MySQL:3306 Tomcat:8080
  • 网络编程需要提供:IP地址 + 端口号,组合在一起叫做网络套接字:Socket。

基于tcp协议的编程模型

C/S架构简介

C(client)就是客户端,S就是服务器端

  • 在C/S模式下客户向服务器发出服务请求,服务器接收请求后提供服务
  • 例如:在一个酒店中,顾客找服务员点菜,服务员把点菜单通知厨师,厨师按点菜单做好菜后让服
    务员端给客户,这就是一种C/S工作方式。如果把酒店看作一个系统,服务员就是客户端,厨师就是服务器。这种系统分工和协同工作的方式就是C/S的工作方式
  • 客户端部分:为每个用户所专有的,负责执行前台功能
  • 服务器部分:由多个用户共享的信息与功能,招待后台服务

编程模型

在这里插入图片描述

  • 服务器
    1.创建ServerSocket类型的对象并提供端口号
    2.等待客户端的连接请求,调用accept()方法;
    3.使用输入输出流进行通信;
    4.关闭Socket;

  • 客户端
    1.创建Socket类型的对象并提供服务器的IP地址和端口号;
    2.使用输入输出流进行通信;
    3.关闭Socket;
    在这里插入图片描述

基于tcp协议模型的框架实现

服务器

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

public class SeverStringTest {
    
    
    public static void main(String[] args) {
    
    
        ServerSocket ss = null;
        Socket s = null;
        try {
    
    
            //1.创建ServiceSocket类型的对象并提供端口号
            ss = new ServerSocket(8888);
            //2.等待客户端的连接请求,调用accept方法
            System.out.println("等待客户端的连接请求...");
            //没有客户端连接就阻塞在这里
            s = ss.accept();
            System.out.println("客户端连接成功!");
            //3使用输入输出流进行通信
        } catch (IOException e) {
    
    
            e.printStackTrace();
        } finally {
    
    
            //4.关闭Socket并释放资源
            if(null!=s) {
    
    
                try {
    
    
                    s.close();
                } catch (IOException e) {
    
    
                    e.printStackTrace();
                }
            }
            if(null != ss) {
    
    
                try {
    
    
                    ss.close();
                } catch (IOException e) {
    
    
                    e.printStackTrace();
                }
            }
        }

    }
}

在这里插入图片描述

客户端

public class ClientStringTest {
    
    
    public static void main(String[] args) {
    
    
        Socket s = null;
        try {
    
    
            //1.创建Socket类型的对象并提供服务器的主机名和端口号
            s = new Socket("127.0.0.7",8888);
            System.out.println("连接服务器成功!");
            //2.使用输入输出流进行通信
        } catch (IOException e) {
    
    
            e.printStackTrace();
        } finally {
    
    
            //3.关闭Socket并释放有关资源
            if(null != s){
    
    
                try {
    
    
                    s.close();
                } catch (IOException e) {
    
    
                    e.printStackTrace();
                }
            }
        }
    }
}

客户端向服务器发送数据的实现

服务器端

public class SeverStringTest {
    
    
    public static void main(String[] args) {
    
    
        ServerSocket ss = null;
        Socket s = null;
        BufferedReader br = null;
        try {
    
    
            //1.创建ServiceSocket类型的对象并提供端口号
            ss = new ServerSocket(8888);
            //2.等待客户端的连接请求,调用accept方法
            System.out.println("等待客户端的连接请求...");
            //没有客户端连接就阻塞在这里
            s = ss.accept();
            System.out.println("客户端连接成功!");
            //3使用输入输出流进行通信
            //实现对客户端发来字符串内容的接受并打印
            br = new BufferedReader(new InputStreamReader(s.getInputStream()));
            String s1 = br.readLine();
            System.out.println("从客户端接收到的字符串内容是"+s1);
        } catch (IOException e) {
    
    
            e.printStackTrace();
        } finally {
    
    
            //4.关闭Socket并释放资源
            if(null!=br){
    
    
                try {
    
    
                    br.close();
                } catch (IOException e) {
    
    
                    e.printStackTrace();
                }
            }
            if(null!=s) {
    
    
                try {
    
    
                    s.close();
                } catch (IOException e) {
    
    
                    e.printStackTrace();
                }
            }
            if(null != ss) {
    
    
                try {
    
    
                    ss.close();
                } catch (IOException e) {
    
    
                    e.printStackTrace();
                }
            }
        }

    }
}

客户端

public class ClientStringTest {
    
    
    public static void main(String[] args) {
    
    
        Socket s = null;
        PrintStream ps = null;
        try {
    
    
            //1.创建Socket类型的对象并提供服务器的主机名和端口号
            s = new Socket("127.0.0.7",8888);
            System.out.println("连接服务器成功!");
            //2.使用输入输出流进行通信
            Thread.sleep(1000);
            //实现客户端向服务器发送字符串内容"hello"
            ps = new PrintStream(s.getOutputStream());
            ps.println("hello");
            System.out.println("客户端发送数据成功!");
        } catch (IOException | InterruptedException e) {
    
    
            e.printStackTrace();
        } finally {
    
    
            //3.关闭Socket并释放有关资源
            if(null!=ps){
    
    
                try {
    
    
                    ps.close();
                } catch (Exception e) {
    
    
                    e.printStackTrace();
                }
            }
            if(null != s){
    
    
                try {
    
    
                    s.close();
                } catch (IOException e) {
    
    
                    e.printStackTrace();
                }
            }
        }
    }
}

Guess you like

Origin blog.csdn.net/Maybe_do_it/article/details/120021505