JAVA学习线路:day14-网络编程

第19章:网络编程基础(TCP/IP与Socket) 操作码业务含义数据内容格式0x01登录用户名(16字节)+ 密码(16字节)0x02发送消息接收者用户名(16字节)+ 消息长度(4字节)+ 消息正文(变长)0x03退出无数据(len=0)0x04响应结果状态码(1字节,0=成功,非0=失败)+ 提示信息(变长) 阅读详情

心得:
我是一名正在自学的java的即将毕业的大学生
总结笔记是为了让自己更好的理解和加深印象。可能不是那么美观,自己可以看懂就好
所有的文档和源代码都开源在GitHub: https://github.com/kun213/JavaNotes上了。希望我们可以一起加油,一起学习,一起交流

day14 【网络编程】

一、网络编程入门

1.1 可以说出软件的结构

C/S结构 :全称为Client/Server结构,是指客户端和服务器结构。常见程序有QQ、迅雷等软件。

B/S结构 :全称为Browser/Server结构,是指浏览器和服务器结构。常见浏览器有谷歌、火狐等。

1.2 可以说出UDP和TCP协议特点

  • TCP:传输控制协议 (Transmission Control Protocol)。TCP协议是面向连接的通信协议,即传输数据之前,在发送端和接收端建立逻辑连接,然后再传输数据,它提供了两台计算机之间可靠无差错的数据传输。
    • 三次握手:TCP协议中,在发送数据的准备阶段,客户端与服务器之间的三次交互,以保证连接的可靠。
      • 第一次握手,客户端向服务器端发出连接请求,等待服务器确认。
      • 第二次握手,服务器端向客户端回送一个响应,通知客户端收到了连接请求。
      • 第三次握手,客户端再次向服务器端发送确认信息,确认连接。整个交互过程如下图所示

完成三次握手,连接建立后,客户端和服务器就可以开始进行数据传输了。由于这种面向连接的特性,TCP协议可以保证传输数据的安全,所以应用十分广泛,例如下载文件、浏览网页等。

  • UDP:用户数据报协议(User Datagram Protocol)。UDP协议是一个面向无连接的协议。传输数据时,不需要建立连接,不管对方端服务是否启动,直接将数据、数据源和目的地都封装在数据包中,直接发送。每个数据包的大小限制在64k以内。它是不可靠协议,因为无连接,所以传输速度快,但是容易丢失数据。日常应用中,例如视频会议、QQ聊天等。

    每次发送的数据最大为64kb。

二、TCP通信协议

2.1 可以说出TCP协议下两个常用类名称

在Java中,提供了两个类用于实现TCP通信程序:

  • 客户端:java.net.Socket 类表示。创建Socket对象,向服务端发出连接请求,服务端响应请求,两者建立连接开始通信。
  • 服务端:java.net.ServerSocket 类表示。创建ServerSocket对象,相当于开启一个服务,并等待客户端的连接。

2.2 如何编写TCP协议下字符串数据传输程序

实现TCP通信的客户端程序:

/**
 * 实现TCP通信的客户端程序
 *
 * java.net.Socket 实现客户端的套接字对象,连接对象
 *
 * 需求: 客户端程序和服务器程序实现数据交换
 *
 * 实现步骤:
 *   1: 创建Socket对象 (主动连接服务器)
 *        Socket(String host, int port)
 *
 *   2: OutputStream getOutputStream()
 *      返回套接字中的字节输出流
 *      方法write写入数据, 写到服务器
 *
 *   3: InputStream getInputStream()
 *      返回套接字中的字节输入流
 *       方法read读取数据,读取的是服务器发回来的数据
 *
 *   4: 释放资源
 */
public class TCPClient {
    public static void main(String[] args)throws IOException {
        //创建Socket对象 (主动连接服务器)
        Socket socket = new Socket("127.0.0.1",9000);

        //OutputStream getOutputStream()
        OutputStream out = socket.getOutputStream();
        //字节流的方法写数据
        out.write("你好服务器".getBytes());//没有写到文件中,写到了服务器中

        InputStream  in = socket.getInputStream();//获取字节输入流
        byte[] bytes = new byte[1024];
        int len = in.read(bytes);//客户端输入流,读取到服务器发回来的数据
        System.out.println(new String(bytes,0,len));

        //释放资源
        //out.close();
        socket.close();
    }
}

实现TCP通信的服务器程序:

/**
 * 实现TCP通信的服务器程序
 * 192.168.27.95
 * java.net.ServerSocket 实现TCP协议中的服务器套接字对象
 *
 * 实现TCP服务器程序步骤:
 *   1: 创建ServerSocket对象
 *     ServerSocket(int port) 端口号
 *
 *   2: 等待客户端的连接,如果没有客户端连接,永远等待
 *     ServerSocket类方法 accept()同意
 *     方法 accept()返回值是 Socket对象 (客户端的连接对象,包含客户端的IP)
 *
 *   3: Socket对象中获取到字节输出流
 *     OutputStream getOutputStream()
 *     方法write写数据,写到客户端
 *
 *   4: Socket对象中获取到字节输入流
 *     InputStream getInputStream()
 *     方法read读取数据,读取的是客户端发来数据
 *
 *   5: 释放资源
 */
public class TCPServer {
    public static void main(String[] args)throws IOException {
        //创建ServerSocket对象
        ServerSocket server = new ServerSocket(9000);
        //ServerSocket类方法 accept()同意
        Socket socket = server.accept();
        //System.out.println(socket);

        //使用客户端连接获取对象,输入流
        InputStream in = socket.getInputStream();
        //in输入流的方法read()读取客户端发来数据
        byte[] bytes = new byte[1024];
        //len返回的是读取到的字节个数
        int len = in.read(bytes);
        System.out.println(new String(bytes,0,len));

        //Socket客户端对象,获取字节输出流
        OutputStream out = socket.getOutputStream();
        out.write("收到!".getBytes());//服务器输出流,写回客户端

        //释放资源
        socket.close();
        server.close();
    }
}

2.3 理解TCP协议下文件上传案例

实现图片上传客户端:

/**
 * 实现TCP图片上传客户端
 * 实现步骤:
 *  1: 创建Socket对象,连接服务器
 *  2: FileInputStream读取 mm.jpg   字节数组
 *  3: Socket对象获取字节输出流
 *     字节数组,交给输出流,写到服务器
 *  4: Socket对象获取字节输入流
 *     全部的图片发送完毕
 *     输入流,读取服务器回来的提示信息 "上传成功"
 *
 *     客户端方法Socket: shutdownOutput() 终止连接对象的输出流 ,
 *     同时跟上TCP终止序列
 *  5: 释放资源
 */
public class TCPClient {
    public static void main(String[] args) throws IOException{
        //1: 创建Socket对象,连接服务器
        Socket socket = new Socket("127.0.0.1",9000);
        //2: 自己的字节输入流,读取图片mm.jpg
        FileInputStream fis = new FileInputStream("e:/msh.jpg");
        //3: Socket对象获取字节输出流
        OutputStream out = socket.getOutputStream();//任何数据,写向服务器
        byte[] bytes = new byte[1024];
        int len = 0;
        //fis读取文件末尾,JVM返回read() -1
        while ((len = fis.read(bytes))!=-1){
            out.write(bytes,0,len);
        }
        //告诉服务器,没数据了,别读,服务器发送TCP的终止符
        socket.shutdownOutput();
        //4:Socket对象获取字节输入流
        InputStream in = socket.getInputStream();//输入流,读取服务器回来的数据
        len = in.read(bytes);
        System.out.println("服务器提示::"+new String(bytes,0,len));

        socket.close();
    }
}

实现图片上传服务器端:

/**
 * 实现图片上传服务器端
 * 实现步骤:
 *  1: 创建对象ServerSocket 绑定端口
 *  2: Socket accept()方法等待客户端连接
 *  3: Socket对象,获取字节输入流,读取客户端发来图片的字节
 *  4: 创建字节输出流,读取到图片,写到 e:/upload
 *  5: Socket对象,获取字节输出流,"上传成功"写回客户端
 *
 *  bug:
 *    1: 演示了2次,为什么文件夹中只有一个文件,同名覆盖
 *      a: 1.jpg
 *      b: 1.jpg
 *
 *   2: 客户端收不到服务器的上传成功
 //告诉服务器,没数据了,别读,服务器发送TCP的终止符
 */
public class TCPServer {
    public static void main(String[] args) throws IOException{
        //1: 创建对象ServerSocket 绑定端口
        ServerSocket server = new ServerSocket(9000);
        // 2: Socket accept()方法等待客户端连接
        Socket socket = server.accept();
        //3: Socket对象,获取字节输入流,读取客户端发来图片的字节
        InputStream in = socket.getInputStream();
        //4: 创建字节输出流,读取到图片,写到 e:/upload
        //上传的文件,重命名,获取当前日期 转换成字符串
        String filename = new SimpleDateFormat("yyyyMMddHHmmssssss").format(Calendar.getInstance().getTime())+".jpg";
        FileOutputStream fos = new FileOutputStream("e:/upload/"+filename);
        byte[] bytes = new byte[1024];
        int len = 0;
        //read()读取是客户端写来的图片!!
        while ( (len = in.read(bytes))!=-1){
            fos.write(bytes,0,len);
        }

        //5: Socket对象,获取字节输出流,"上传成功"写回客户端
        OutputStream out= socket.getOutputStream();
        out.write("上传成功!".getBytes());

        socket.close();
        server.close();
    }
}

这是我的公众号,希望大家可以关注,让我们一起做最好的自我。
我也会把我自学视频分享在上面,供大家一起学习。

CodeBull

2019最新《传智教育黑马java项目实战》 1.SE基础班1-1 Java基础语法1-2 面向对象和封装1-3 常用API第一部分1-4 继承与多态1-5 常用API第二部分1-6 集合1-7 异常与多线程1-8 File类与IO流1-9 网络编程1-10 JDK8新特性阶段1视频目录.docx2.javaweb2-1基础加强.zip2-2MySQL.zip2-3JDBC.zip2-4HTML和CSS.zip2-5JavaScript.zi... 阅读详情

相关推荐

FPGA开发者必看:如何用SATA3.0主机控制器IP实现高速存储扩展(附Xilinx实测数据)

本文为FPGA开发者提供了基于SATA3.0主机控制器IP核的高速存储方案设计与优化指南。通过详细解析IP核架构、Xilinx FPGA平台集成实战及性能优化技巧,帮助开发者实现接近理论极限的540MB/s数据传输速度。文章还包含常见问题解决方案和高级应用场景拓展,是硬件工程师提升存储性能的必备参考。

weixin_30632089的博客 114

网络编程基础知识

什么是网络,协议本质,网络分层、什么是报头以及为什么要有报头,端口号

C_Trip的博客 4205

详细推导波特图增益和相位曲线

文章来源:https://mp.weixin.qq.com/s/UCy9mRRok5Hc9qHq3qde5g 今天这篇文章想把近段时间关于波特图方面学习的内容整理一下。波特图将会是梳理闭环控制这个系列的开始。目前的计划是,以无源器件为基础,然后结合运放,再过渡到开关电源的环路控制方面。如果对这方面感兴趣的朋友,可以持续一起学习起来,目标就是掌握开关电源的闭环控制。 1. 什么是波特图? 波特图最常见的应用是在线性非时变的系统中,用于对传递函数的增益和相位进行分析,从而判断出系统随频率的响应是否稳定。因此,波

ltqdxl的博客 2万+

网络编程基础

♫什么是网络编程网络编程,指网络上的主机,通过不同的进程,以编程的方式实现网络数据传输。在网络编程中,获取一个网络资源,涉及到两次网络数据传输: 发送端请求数据的发送 和 接受端响应数据的发送,其中提供服务的一端叫做接受端,获取服务的一端叫做客户端。

qq_61872165的博客 3085

保姆级教程:用dnSpy调试Unity游戏,从找DLL到打断点全流程(附调试版mono.dll下载)

本文详细介绍了使用dnSpy调试Unity游戏的全流程,包括环境准备、关键程序集定位、mono.dll版本匹配与替换、调试环境配置及实战技巧。通过本教程,开发者可以高效进行Unity游戏逆向分析,适用于学习设计模式或安全审计等场景。

weixin_30236595的博客 577

杰理SDK入门教程(六):自定义按键事件

这篇教程介绍了在杰理AC695N芯片上实现自定义按键功能的完整流程,包含三个核心步骤:首先在key_event_deal.h文件中添加按键枚举定义;然后在adkey_table.c配置按键映射表,按模式和行为类型设置按键值;最后在app_common.c的消息处理函数中添加自定义按键逻辑。教程强调需注意不同模式按键表的列定义差异,并提供了具体代码示例,最后指导完成编译测试验证。全文结构清晰,配有关键代码截图,适合开发者快速上手自定义按键功能开发。

qq_42014563的博客 1016

1.网络编程基础知识 - 基础概念、TCP网络通信、UDP网络通信

根据IP地址的组成=网络地址+主机地址,对IPv4进行分类IP地址分类ABC类比较常见,DE类比较特殊A类表示的主机要多一点,因为有24位主机号,可以表示主机 0~(2^24)-1个主机B类用16位也就是2个字节来表示网络号,并且前面两位固定10;也用2个字节来表示主机号C类用24位也就是3个字节表示网络号,并且前面三位固定号码110;主机号用8位也就是1个字节来表示,可以表示0~255个主机D类多播组号类似广播组号E类保留起来后面使用根据上面划分的规则,可以计算出IPv4各个类型的表示范围。

weixin_51351637的博客 2213

GibbsCAM软件二次开发:GibbsCAM软件API接口详解

API(Application Programming Interface,应用程序编程接口)是一种允许不同软件之间进行通信的接口。在GibbsCAM软件中,API提供了与外部程序交互的能力,使得开发者可以利用GibbsCAM的强大功能进行二次开发,定制化满足特定的制造需求。GibbsCAM的API主要基于.NET框架,使用C#或VB.NET等语言进行编程。在GibbsCAM软件中,通过API接口创建自定义几何形状是实现复杂零件设计和加工策略定制的关键步骤。

kkchenjj的博客 1494

网络编程基础知识(学网编看它就够了)

通俗易懂描述网络编程基本知识。并且给出源代码。

qq_57392653的博客 1万+

红薯游客小眼睛接口分析与Python脚本实现

小眼睛接口与请求流程分析,使用Python实现小眼睛+1

吴秋霖的博客 2610

Unity 横版游戏开发天花板?状态机、联机同步与横版动作游戏架构全都有

在 Unity 横版动作游戏开发领域,最耗时间的往往不是角色移动,而是整套“可扩展架构”的搭建。包括角色状态管理、敌人 AI、武器系统、关卡编辑器、联机同步、输入适配、UI 与存档系统等。2D Action Platformer Kit 的核心价值,并不只是“提供素材”,而是它已经帮开发者搭好了一整套适用于横版动作游戏的底层框架。

2403_88403568的博客 424

Java学习路线:day27 网络编程

文章目录第14章 网络编程网络编程概述网络通信要素概述通信要素1:IP和端口号IP的理解与InetAddress类的实例化端口号的理解通信要素2:网络协议TCP和UDP网络通信协议的对比TCP网络编程UDP网络编程URL编程URL的理解与实例化URL网络编程实现Tomcat服务端数据下载URI、URL和URN的区别 第14章 网络编程 网络编程概述 Java是Internet 上的语言,它从语言级上提供了对网络应用程序的支持,程序员能够很容易开发常见的网络应用程序。 Java提供的网络类库,可以实现

杨丙寅 1247

mongodb在游戏开发领域的优势

目前游戏服务器使用mysql作为数据库的较多,然而,使用mongodb来作为存储层,在某些方面比mysql更为方便和适合。

littleschemer的博客 1698

Java学习——Day14:网络编程

7.1 网络编程概述 Java是 Internet 上的语言,它从语言级上提供了对网络应用程 序的支持,程序员能够很容易开发常见的网络应用程序。 Java提供的网络类库,可以实现无痛的网络连接,联网的底层 细节被隐藏在 Java 的本机安装系统里,由 JVM 进行控制。并 且 Java 实现了一个跨平台的网络库,程序员面对的是一个统一 的网络编程环境。 计算机网络: 把分布在不同地理区域的计算机与专门的外部设备用通信线路互连成一个规 模大、功能强的网络系统,从而使众多的计算机可以方便地互相传递信

zxzx666的博客 362

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

day14-网络编程

TCP

qq_43214726的博客 274

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

javaSE_day14学习笔记 —— 网络编程

javaSE_day141. 网络编程概述1.1 计算机网络1.2 网络模型1.3 协议1.4 IP地址1.5 端口1.6域名解析2. Java中的网络编程2.1 UDP通信——写信2.2 TCP通信——打电话案例:实现文件上传服务器练习:模拟会话聊天室 1. 网络编程概述 1.1 计算机网络 将独立的,分散的计算机系统(手机,电脑)通过线路,通信设备(路由器,交换机)连接起来,由软件来实在资源共享,信息传递的系统。 1.2 网络模型 OSI开放式系统互联。国际标准组织制定了OS七层网络模型(Open

LIKE_0217的博客 459

Day22Java学习笔记——认识网络编程

网络编程 1、1概述 计算机网络: 计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。 网络编程目的: 传播交流信息,数据交换。通信 想要达到这个效果需要什么: 如何准确定位网络上的一台主机,端口;定位到计算机上某个资源 找到了这个主机,如何传输数据? ...

u013583756的博客 277

Java学习day026-027(网络编程)

的

牢骚太盛防肠断,风物长宜放眼量 213

Java通俗易懂30天 第27天:网络编程

文章目录 文章目录文章目录第14章 网络编程网络编程概述网络通信要素概述通信要素1:IP和端口号IP的理解与InetAddress类的实例化端口号的理解通信要素2:网络协议TCP和UDP网络通信协议的对比; TCP网络编程UDP网络编程URL编程URL的理解与实例化URL网络编程实现Tomcat服务端数据下载URI、URL和URN的区别 全部源码:https://github.com/name365/JavaSE-30Day 第14章 网络编程 网络编程概述 Java是Internet 上的语言,它

程序员小刘 851

Java21-day12【网络编程(网络编程入门(ip地址、端口、协议、InetAddress)、UDP通信程序、TCP通信程序)】

1.1、网络编程概述 1.2、网络编程三要素 1.3、IP地址 1.4、InetAddress的使用 1.5、端口 1.6、协议 2.1、UDP通信原理 2.2、UDP发送数据 2.3、UDP接收数据 2.4、UDP通信程序练习 3.1、TCP通信原理 3.2、TCP发送数据 3.3、TCP接收数据 3.4、TCP通信程序练习

upward 1182

java基础学习总结(十)——网络编程二

第14章:网络编程(day20) day20 day20_03网络通信概述 主要内容 网络编程概述 通讯要素 IP和端口号 网络通信协议 InetAddress类 TCP网络通信 UDP网络通信 URL编程 网络编程概述 Java是 Internet 上的语言,它从语言级上提供了对网络应用程序的支持,程序员能够很容易开发常见的网络应用程序。 Java提供的网...

Gorden的博客 514

javaday-26网络编程

26.09_网络编程(网络编程概述)(了解) A:计算机网络 是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。 B:网络编程 就是用来实现网络互连的不同计算机上运行的程序间可以进行数据交换。 26.10_网络编程(网络编程三要素之IP概述)(掌握) 每个设备在网络中的唯一

First 007的博客 472

JavaSE-21.1【网络编程入门】

1 package day12.lesson1; 2 3 import java.net.InetAddress; 4 import java.net.UnknownHostException; 5 6 /* 7 1 网络编程入门 8 9 1.1 网络编程概述 10 11 计算机网络 12 是指将地理位置不同的具有独立功...

yubaby 377

JavaSE 网络编程 计算机网络

day26目录: 网络编程 计算机网络 是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来, 在网络操作系统,网络管理软件及网络通信协议的管理和协调下, 实现资源共享和信息传递的计算机系统。 网络编程 就是用来实现网络互连的不同计算机上运行的程序间可以进行数据交换 26.01_网络编程(网络模型概述和图解)(了解) A:网络模型概述 计算机网络之间以何种规则进行通信,就是网络模型研究问题。 网络模型一般是指 OSI(Open System Inter

qq_43563187的博客 544

Java里的类和对象

本文介绍了面向对象编程(OOP)的基本概念和Java中的实现方式。主要内容包括: 面向对象与面向过程的区别,前者关注对象交互,后者注重过程步骤。 类的定义和使用,通过class关键字描述实体的属性和方法。 类的实例化过程,使用new关键字创建对象。 this引用的作用和特性,解决成员变量与参数同名问题。 构造方法的概念与特性,用于对象初始化。 对象的默认初始化和就地初始化方式。

Ivy_0418的博客 174
上一篇: 解决:IntelliJ IDEA输入法不跟随光标,亲测有效
下一篇: JAVA学习线路:day15-注释_反射
CodeBull码牛
博客等级 码龄6年 14粉丝 18原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值