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 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 网络编程-B/S之间的数据传输 -> 正文阅读

[网络协议]网络编程-B/S之间的数据传输

网络编程

第一章 网络编程入门

1.1软件结构

1.1.1 C/S结构:全程为Client/Server结构,是指客户端和服务器结构。

1.1.2 B/S结构:全称为Browser/Server结构,是指浏览器和服务器结构。

1.2网络通信协议

TCP/IP协议:传输控制协议/因特?互联协议( Transmission Control Protocol/Internet Protocol)

1.3协议分类

1、UDP:?户数据报协议(User Datagram Protocol)。UDP是?连接通信协议,即在数据传输时,数 据的发送端和接收端不建?逻辑连接。

2、TCP:传输控制协议 (Transmission Control Protocol)。TCP协议是?向连接的通信协议,即传输 数据之前,在发送端和接收端建?逻辑连接,然后再传输数据,它提供了两台计算机之间可靠?差 错的数据传输(三次握手

1.4网络编程三要素

1.协议:计算机?络通信必须遵守的规则

2.Ip地址:指互联?协议地址(Internet Protocol Address),俗称IP。

3.端?号:?两个字节表示的整数,它的取值范围是0~65535。(端口取值建议取值>1023)

第二章TCP通信程序

在这里插入图片描述

2.1Socket类:客户端

2.1.1构造方法

public Socket(String host, int port) :连接服务器

构造举例,代码如下:

Socket client = new Socket("127.0.0.1", 6666)

2.1.2成员方法

1.public InputStream getInputStream() : 获取网络输入流,读数据
2.public OutputStream getOutputStream() :获取网络输出流,写数据
3.public void close() :关闭客户端
4.public void shutdownOutput() :终止输出流

2.2ServerSocket类:服务端

2.2.1构造方法

public ServerSocket(int port) :初始化ServerSocket服务器

构造举例,代码如下:

ServerSocket server = new ServerSocket(6666);

2.2.2成员方法

public Socket accept() :侦听并接受连接,返回?个新的Socket对象,?于和客户端实现通
信。该?法会?直阻塞直到建?连接。//接收客户端,产生一个新的客户端交互的一个socket对象

第三章综合案例

3.1文件上传案例

3.1.1文件上传分析图解

1.【客户端】文件输入流:从硬盘读取文件数据到客户端中。
2.【客户端】网络输出流:把从硬盘读取到的文件数据通过网络输出流写到服务端
3.【服务端】网络输入流:读取从客户端传输过来的文件数据到服务端
4.【服务端】文件输出流:服务端读取到的文件数据写到服务器硬盘中

在这里插入图片描述

3.1.2代码实现

服务端实现:
package com.soft.demo06;

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

/**
 * @author 想要的东西太贵
 * @version 喜欢的女人太美
 * @date 2021/8/3 15:51
 */
public class FileUpload_Server {
    public static void main(String[] args) throws IOException {

        //1.初始化ServerSocket服务器
        System.out.println("服务器 启动...");
        ServerSocket serverSocket = new ServerSocket(6666);

       //循环接收不同的客户端的请求
        while (true) {
            //2.接收客户端,产生一个新的客户端交互的一个socket对象
            Socket accept = serverSocket.accept();
            //当我们读写文件特别大的时候,其他的客户端就无法直接连接,会造成服务器无响应
            //我们要把耗时的代码放入到线程中
            new Thread(new Runnable() {
                @Override
                public void run() {
                    BufferedInputStream bis = null;
                    BufferedOutputStream bos = null;
                    try {
                        //3.创建流对象,读取文件数据
                        //3.1获取网络输入流,文件输出流
                        bis = new BufferedInputStream(accept.getInputStream());
                        //3.2创建输出流,保存到本地
                        bos = new BufferedOutputStream(new FileOutputStream(System.currentTimeMillis()+".jpg"));
                        //4.一边读数据,一边写数据
                        byte[] buffer = new byte[1024 * 8];
                        int len;
                        while ((len = bis.read(buffer)) != -1) {
                            //写到硬盘中
                            bos.write(buffer, 0, len);
                            //刷新缓存
                            bos.flush();
                        }
                        //todo 服务端回显数据给客户端
                        OutputStream outputStream = accept.getOutputStream();
                        outputStream.write(("相思不过一场戏\n" +
                                "梦 夜微凉 思一场\n" +
                                "无人在意心中想").getBytes());
                        outputStream.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    } finally {
                        //5.关闭资源
                        try {
                            if (bos != null) {
                                bos.close();
                            }
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                        try {
                            if (bis != null) {
                                bis.close();
                            }
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                        try {
                            if (accept != null) {
                                accept.close();
                            }
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }

                }
            }).start();


            System.out.println("文件上传已保存");
        }



//        serverSocket.close();

    }
}

客户端实现
package com.soft.demo06;

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

/**
 * @author 想要的东西太贵
 * @version 喜欢的女人太美
 * @date 2021/8/3 16:17
 */
public class FileUploadClient {
    public static void main(String[] args) throws IOException {
        //1.连接服务器
        Socket socket = new Socket("127.0.0.1", 6666);
        //2.创建网络输出流,创建本地输入流
        BufferedOutputStream bos = new BufferedOutputStream(socket.getOutputStream());
        BufferedInputStream bis = new BufferedInputStream(new FileInputStream("l1.jpg"));
        //3.一边读数据,一边写数据
        byte[] buffer = new byte[1024 * 8];
        int len;
        while ((len = bis.read(buffer)) != -1) {
            bos.write(buffer, 0, len);
            //刷新
            bos.flush();
        }
        // 关闭输出流,通知服务端,写出数据完毕
        socket.shutdownOutput();
        System.out.println("文件发送完毕");
        //todo 解析回写
        InputStream inputStream = socket.getInputStream();
        byte[] buffer2 = new byte[1024];
        int len2 = inputStream.read(buffer2);
        String content = new String(buffer2, 0, len2);
        System.out.println(content);
        inputStream.close();
        //4,关闭资源
        bis.close();
        bos.close();
        socket.close();
    }
}

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-08-06 10:11:58  更:2021-08-06 10:13:17 
 
开发: 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年5日历 -2024/5/4 16:50:41-

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