#java学习之路——基础阶段二(第九篇)(代码片段)

zyz233 zyz233     2022-12-01     265

关键词:

我的学习阶段是跟着CZBK黑马的双源课程,学习目标以及博客是为了审查自己的学习情况,毕竟看一遍,敲一遍,和自己归纳总结一遍有着很大的区别,在此期间我会参杂Java疯狂讲义(第四版)里面的内容。

前言:此随笔主要是Java基础中的基础,相信大家对这方面肯定有着自己的理解和认识,具体详解可以参照万能的baidu,有的我就一笔带过,希望在我的学习之路上能够有大牛进行指导,也有更多的小伙伴共勉。

1.网络编程入门

首先要了解软件的结构有两种一种是C/S全称是Client/server 客户端和服务器之间的, 还有一种是B/S 全称是Browser/Service 浏览器和服务器之间的架构。而网络编程是在一定的协议的基础下,实现两台计算机的通信。

然后就是网络通信协议,通信协议是对计算机必须遵循的规则,只有遵循了这些规则才能完成之间的通讯。TCP/IP是互联网最基本最广泛的协议。才用了四层分层模型,每一层需要呼叫下一层来完成自己的需求。

TCP协议:是互联网面向对象的协议,这里客户端和服务器端需要进行三次交互从而达到连接的可靠。也称这三次交互叫三次握手。

UDP协议:是一个面向无连接的协议,是在不需要请求的情况下服务器发送数据包的一种协议,直接送达但是容易丢十数据,每个数据包的大小控制在64kb之内。

网络编程的三要素:协议,IP地址,端口号。

协议:是设定的连接规则,必须要在遵守规则的情况下进行连接。

IP地址:是一个设备号,可以理解为每个电脑特定的身份信息。这里有IPV4/IPV6两种。

常用的命令:Ipconfig在控制台输入,用来查询本机的IP地址

      Ping 空格 IP地址用来查看网络是否能连接通路

而特殊的IP地址有127.0.0.1和localhost两种,这是本机的本地IP地址。

2.TCP通信程序

TCP能完成两台计算机之间的通讯。这里主要是服务器端和客户端两种。

在Java中提供了两个类来完成服务器和客户端之间的通讯,一种是Socket和ServerSocket。创建Socket请求服务器的连接,创建服务器ServerSocket等待请求。

Socket类:该类接近客户端套接字,套接字指的是两台设备之间的通讯端点。

构造方法:

Socket 参数传入的是要连接的地址IP和端口号。而如果要进行网络软件的测试一般是本地的127.0.0.1和localhost两种这种不进行任何网络协议的传输。

成员方法:

·getInputStream 返回此套接字的输入流

·getOutputStream 返回此套接字的输出流

·close 关闭此套接字

·shutdownOutput 禁用此套接字的输出流

serverSocket类:这个类实现了服务器端的套接字,等待通过网络的请求。

构造方法:

server 参数传入的是端口号。

成员方法:

·accept 倾听并接受连接,返回一个新的Socket对象。用鱼和客户端实现通讯,这个方法用一直会阻塞到建立连接。

这里是服务器端的实现:

其中运用到了ServerSocket / Socket / Thread / FileOutputStream /

这里所用到的优化:

为了防止socket是用完之后就进行关闭,可以使用While(true)方法将功能一直实现,而用了Thread 多线程方法为了能够在别人上传大文件时最服务器的占用使用了多线程的方法。

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

public class server 
    public static void main(String[] args) throws IOException 
        System.out.println("server begining!");
        ServerSocket serverSocket = new ServerSocket(8889);
        while (true) 
            Socket accept = serverSocket.accept();
            new Thread(() -> 
                try (
                        BufferedInputStream bufferedInputStream = new BufferedInputStream(accept.getInputStream());
                        FileOutputStream fileOutputStream = new FileOutputStream(System.currentTimeMillis() + ".jpg");
//                    BufferedoutputStream
                        BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(fileOutputStream);
                ) 
                    byte[] bytes = new byte[1024];
                    int len;
                    while ((len = bufferedInputStream.read(bytes)) != -1) 
                        bufferedOutputStream.write(bytes, 0, len);
                    
                    System.out.println("backing...");
                    OutputStream outputStream = accept.getOutputStream();
                    outputStream.write("upload".getBytes());
                    outputStream.close();
                 catch (IOException e) 
                    e.printStackTrace();
                
            ).start();
        
    

下面是客户端的实现:

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

public class Client 
    public static void main(String[] args) throws IOException 
        BufferedInputStream bufferedinputStream = new BufferedInputStream(new FileInputStream("text.jpg"));
        Socket socket = new Socket("localhost", 8889);
        BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(socket.getOutputStream());

        byte[] bytes = new byte[1024];
        int len;
        while ((len = bufferedinputStream.read(bytes)) != -1) 
            bufferedOutputStream.write(bytes,0,len);
        

        socket.shutdownOutput();
        System.out.println("finish");
        InputStream inputStream = socket.getInputStream();
        byte[] back = new byte[1024];
        inputStream.read(back);
        System.out.println(new String(back));
        inputStream.close();
        socket.close();
        bufferedinputStream.close();
    

 

#java学习之路——基础阶段二(第五篇)

我的学习阶段是跟着CZBK黑马的双源课程,学习目标以及博客是为了审查自己的学习情况,毕竟看一遍,敲一遍,和自己归纳总结一遍有着很大的区别,在此期间我会参杂Java疯狂讲义(第四版)里面的内容。前言:此随笔主要是J... 查看详情

#java学习之路——基础阶段二(第十篇)

我的学习阶段是跟着CZBK黑马的双源课程,学习目标以及博客是为了审查自己的学习情况,毕竟看一遍,敲一遍,和自己归纳总结一遍有着很大的区别,在此期间我会参杂Java疯狂讲义(第四版)里面的内容。前言:此随笔主要是J... 查看详情

#java学习之路——基础阶段二(第四篇)

我的学习阶段是跟着CZBK黑马的双源课程,学习目标以及博客是为了审查自己的学习情况,毕竟看一遍,敲一遍,和自己归纳总结一遍有着很大的区别,在此期间我会参杂Java疯狂讲义(第四版)里面的内容。前言:此随笔主要是J... 查看详情

#java学习之路——基础阶段二(第十三篇)

我的学习阶段是跟着CZBK黑马的双源课程,学习目标以及博客是为了审查自己的学习情况,毕竟看一遍,敲一遍,和自己归纳总结一遍有着很大的区别,在此期间我会参杂Java疯狂讲义(第四版)里面的内容。前言:此随笔主要是J... 查看详情

#java学习之路——基础阶段二(第十二篇)

我的学习阶段是跟着CZBK黑马的双源课程,学习目标以及博客是为了审查自己的学习情况,毕竟看一遍,敲一遍,和自己归纳总结一遍有着很大的区别,在此期间我会参杂Java疯狂讲义(第四版)里面的内容。前言:此随笔主要是J... 查看详情

python成长之路第九篇:网络编程(代码片段)

一、套接字1.1、套接字套接字最初是为同一主机上的应用程序所创建,使得主机上运行的一个程序(又名一个进程)与另一个运行的程序进行通信。这就是所谓的进程间通信(InterProcessCommunication,IPC)。有两种类型的套接字:... 查看详情

java基础第九篇之final和内部类等

final关键字:final:最终,终极 final:作用:修饰类,变量,方法、成员变量的访问1.final修饰变量:  final修饰局部变量:把这个局部变量变成一个厂里,这个厂里只能被赋值一次final修饰成员变量:要求这个成员变量在创建对象之前... 查看详情

c++升级之路第九篇:vector(代码片段)

...你们好呀🌟🍭🍭系列专栏:【C++学习与应用】✒️✒️本篇内容:vector的基本概念、vector的使用(构造,迭代器,空间增长,增删查改)、vector迭代器失效问题、vector重要接口的模... 查看详情

vue学习之路第九篇:双向数据绑定v-model指令(代码片段)

1、学习准备:①:双向数据绑定可以简单理解为:后端定义的数据改变,前端页面展示的时候会自动改变,数据通过前端页面修改的时候,后端定义的数据内容也会随之改变。②:指令中只有v-model可以实现双向数据绑定。③:v... 查看详情

#java学习之路——基础阶段(第十篇)

我的学习阶段是跟着CZBK黑马的双源课程,学习目标以及博客是为了审查自己的学习情况,毕竟看一遍,敲一遍,和自己归纳总结一遍有着很大的区别,在此期间我会参杂Java疯狂讲义(第四版)里面的内容。前言:此随笔主要是J... 查看详情

#java学习之路——基础阶段(第一篇)

  我的学习阶段是跟着CZBK黑马的双源课程,学习目标以及博客是为了审查自己的学习情况,毕竟看一遍,敲一遍,和自己归纳总结一遍有着很大的区别,在此期间我会参杂Java疯狂讲义(第四版)里面的内容。前言:此随笔主... 查看详情

#java学习之路——基础阶段(第七篇)

我的学习阶段是跟着CZBK黑马的双源课程,学习目标以及博客是为了审查自己的学习情况,毕竟看一遍,敲一遍,和自己归纳总结一遍有着很大的区别,在此期间我会参杂Java疯狂讲义(第四版)里面的内容。前言:此随笔主要是J... 查看详情

python学习第九篇:zipfile库操作压缩包(代码片段)

​Python学习第九篇:zipfile库操作压缩包——活动地址:CSDN21天学习挑战赛zipfile是python里用来做zip格式编码的压缩和解压缩的zipfile里有两个非常常用的class,分别是ZipFile和ZipInfo,在绝大多数的情况下,我们只需要使用这... 查看详情

#java学习之路——基础阶段(第十一篇)

我的学习阶段是跟着CZBK黑马的双源课程,学习目标以及博客是为了审查自己的学习情况,毕竟看一遍,敲一遍,和自己归纳总结一遍有着很大的区别,在此期间我会参杂Java疯狂讲义(第四版)里面的内容。前言:此随笔主要是J... 查看详情

javaweb自学之路

一、Java学习路线 第一阶段:Java基础,包括java语法,面向对象特征,常见API,集合框架;(基础) 第二阶段:java界面编程,包括AWT,事件机制,SWING,(不常用)这个部分也可以跳过,用的时候再看都能来及; 第三阶... 查看详情

第九篇-流程控制

return例子一:<?phpfunctionadd($a,$b) echo"echo"; return$a+$b;//return一般用于function内返回值,并且停止下面的php代码 return$a*$b;$c=add(5,3);//得到的$c返回值!echo$c;例子二:index.php<?php$config=include‘config.php‘;print_r( 查看详情

第九篇装饰器

阅读目录一什么是装饰器二装饰器需要遵循的原则三实现装饰器知识储备四高阶函数五函数嵌套六闭包七无参装饰器八装饰器应用示例 一什么是装饰器器即函数装饰即修饰,意指为其他函数添加新功能装饰器定义:本质就是... 查看详情

第九篇装饰器

阅读目录一什么是装饰器二装饰器需要遵循的原则三实现装饰器知识储备四高阶函数五函数嵌套六闭包七无参装饰器八装饰器应用示例九超时装饰器 一什么是装饰器器即函数装饰即修饰,意指为其他函数添加新功能装饰器定... 查看详情