IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> java_网络编程 -> 正文阅读

[网络协议]java_网络编程

网络通信协议

  1. 应用层
    • http
  2. 传输层
    • tcp(Transaction control protocol 传输控制协议) 、udp(user datagram protocol 用户数据报协议)
      • udp协议:面向无连接的协议,效率高,丢包多
      • tcp协议:面向连接,有三次握手,相对udp安全,但没有udp效率高。
      • 在这里插入图片描述

网络编程三要素

  • 协议
  • IP地址
  • 端口号

Tcp通信概念

通信的步骤

  1. 服务器端先启动
  2. 服务器端不会主动的请求客户端,必须使用客户端请求服务器端
  3. 客户端和服务器端建立一个逻辑上的链接,这个链接包含一个对象,这个对象就是IO对象,之后二者就可以用IO对象进行通信了
  4. 通信的数据不仅仅是字符,所以IO对象是字节流对象

在这里插入图片描述

客户端必须明确两件事情
1.多个客户端同时和服务器端进行交互,服务器端必须明确和那个客户端进行交互,在服务器端有一个方法,叫accept,可以获取到请求的客户端对象
2.多个客户端同时和服务器进行交互,就需要使用多个IO流对象
服务器是没有IO流的,服务器可以获取到请求的客户端对象Socket使用每个客户端Socket中提供的IO流和客户端进行交互,
服务器使用客户端的字节输入流读取客户端发送的数据,
服务器端使用客户端的字节输出流发送给客户端信息。

tcp通信的服务端

package net;

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

public class TcpServer {
    public static void main(String[] args) throws IOException {
        //1.创建服务器ServerSocket对象和系统要指定的 "端口号"
        ServerSocket serverSocket = new ServerSocket(8888);
        //2.使用ServerSocket对象中的方法accept,接受客户端的socket对象
        Socket socket = serverSocket.accept();
        //3.使用Socket对象中的方法getInputStream方法获取到InputStream对象
        InputStream inputStream = socket.getInputStream();
        //4.使用InputStream对象的read方法读取到客户端的发送的数据
        byte car[] = new byte[1024];
        int len = 0;
        len = inputStream.read(car);
        System.out.println("客户端发送的数据---------------" + new String(car, 0, len));
        //5.使用socket对象中的方法getOutputStream()方法,获取到OutputStream对象
        OutputStream outputStream = socket.getOutputStream();
        //6.使用OutputStream对象的write方法给客户端返回数据
        outputStream.write("服务器收到".getBytes());
        //7.关闭流
        socket.close();
        serverSocket.close();
    }
}


TCP通信客户端

package net;

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

public class TCPClient {
    public static void main(String[] args) throws IOException {
        //1.创建一个客户端Socket,构造方法绑定服务器的"IP地址端口号"
        Socket socket = new Socket("127.0.0.1", 8888);
        //2.使用Socket对象中的方法getOutputStream()获取网络字节输出流OutputStream对象
        OutputStream outputStream = socket.getOutputStream();
        //3.使用网络字节输出流对象的write方法给服务器端发送消息
        outputStream.write("你好服务器".getBytes());
        //4.使用Socket对象中的方法getInputStream()获取字节输出流对象InputStream对象
        InputStream inputStream = socket.getInputStream();
        //5.使用网络字节输入流对象InputStream的read方法读取服务器的返回的数据
        byte[] car = new byte[1024];
        int len = 0;
        len = inputStream.read(car);
        System.out.println("服务器返回的数据 -------------" + new String(car, 0, len));
        //6.释放socket资源(socket)
        socket.close();
    }
}

文件上传案例

分析

在这里插入图片描述

客户端服务器端代码

启动时先启动服务器端的代码

package net_fileUpload;

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

public class TcpServer {
    public static void main(String[] args) throws IOException {
        //服务器用网络流读入客户端写过来的文件,服务器用本地流将文件写到自身的文件系统
        ServerSocket serverSocket = new ServerSocket(8888);
        Socket accept = serverSocket.accept();
        InputStream inputStream = accept.getInputStream();
        File file = new File("F:\\uploadFile");
        if (!file.exists()){
            file.mkdir();
        }
        FileOutputStream fileOutputStream = new FileOutputStream(file + "\\copy.txt");
        int len = 0;
        byte[] bytes = new byte[1024];
        //循环中读取客户端的写入服务器的数据,服务器写入本地磁盘
        while ((len = inputStream.read(bytes)) != -1){
            fileOutputStream.write(bytes,0,len);
        }
        //服务器返回上传成功
        OutputStream outputStream = accept.getOutputStream();
        outputStream.write("上传成功".getBytes());
        outputStream.close();
        fileOutputStream.close();
        inputStream.close();
        serverSocket.close();

    }
}

客户端代码

package net_fileUpload;

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

public class TcpClient {
    public static void main(String[] args) throws IOException {
        //本地文件-->(本地流)客户端----->(网络流)服务器
        FileInputStream fileInputStream = new FileInputStream("F:\\aaa.txt");
        Socket socket = new Socket("127.0.0.1",8888);
        OutputStream outputStream = socket.getOutputStream();
        int len = 0;
        byte[] car = new byte[1024];
        //循环中实现了本地读到客户端,客户端写到服务器
        while ((len = fileInputStream.read(car)) != -1) {
            outputStream.write(car, 0, len);
        }
        socket.shutdownOutput();//这一句很重要,没有上面的read()会阻塞,循环后的代码都不执行
        //获取一个网络输入流,为了读入服务器给客户端返回的消息
        InputStream inputStream = socket.getInputStream();
        while ((len = inputStream.read(car)) != -1) {
            System.out.println("服务器说" + new String(car, 0, len));
        }
        socket.close();
        fileInputStream.close();
    }
}

客户端服务器代码优化

视频

b\s架构案例

https://www.bilibili.com/video/BV144411X79Q?p=15

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-02-24 15:41:42  更:2022-02-24 15:42:28 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 9:28:31-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码