java网络编程-学习总结

文章所写内容是我自己对学习java网络编程阶段做一个小小的总结,把自己所学之物与大家分享一下,希望能与各位共同学习进步。

GitHub地址:https://github.com/justbeaboy/Network-Programing

废话不多说,开整!

《java网络编程-学习总结》

本编文章主要从以下几个方面进行说明:

  • 网络模型
  • 网络通信的三要素
  • UDP协议
  • TCP协议

一、网络模型

对于网络模型图,比较常见的是OSI七层模型TCP/IP模型。对于网络模型图的介绍,网上的资源还是很详细的。

下图是从网上扣下来的:

《java网络编程-学习总结》 网络模型图

个人感觉上图的介绍简洁明了,通过这张图我们就可以很清楚的知道,在网络模型中的每一层具体是做了哪些操作。具体每层的作用详解,相信大家可以在网上找到更全面 的解释,这里就不一一赘述了。

针对该模型,用户在操作数据的过程,就是自上而下的数据封包的过程,从应用层向下封包到接收端。接收端自下而上进行数据拆包,从而得到用户数据。
大致的流程就是:A—>B—C—>B—A

二、网络通信三要素

在简单介绍完网络通信模型后,接下来就进入“正题”。

网络通信有三大要素:IP地址、端口、传输协议。

  • IP地址
    要想进行网络通信,你得先知道我我是谁,我在哪啊。

我是谁?我从哪里来?我要到那里去? —————哲学三大命题

在java中编程中,获取IP地址的类是InetAddress,在包java,net下。

常用方法如下:
1、getHostName() –>获取此IP地址的主机名
2、getLocalHost()–>返回本地主机
3、getHostAddress()–>返回IP地址字符串
4、getByName(String host)—>已知主机名,返回主机的IP地址
5、…

  • 端口
    关于端口的知识本次没做过多的总结,大致如下:
    FTP:21 ; SMTP:25;HTTP:80
    系统保留的端口:0~1024
    端口的范围:0~65535(2的16次方减1)

  • 传输协议
    传输协议,说白了就是我们一起商量一个规则,一个有关传输的规则。
    UDP协议和TCP协议是我学习时重点的关注对象,为什么这么说呢?

面试的时候会经常问到两者之间的区别,想想以往的回答简直是….下面来逐一介绍。

三、UDP协议

UDP:用户数据报协议
介绍:是面向无连接的,但要明确对方主机端口协议。只管传送,不管是否传送到达。
数据包的size:每一个包的size都在64k之内,因为如果包的size超过64k,在IP层组包会发生错误,包会被丢弃。接收端不能组包,从而会将整个IP数据报丢弃。
作用:对数据精度要求不高或者不需要长久保存数据时使用。
特点:UDP不保证可靠传输,速度极快。因为它只管发,才不管你(接收端)收没收到。

下面来总结一下,UDP是怎么使用的吧。

在传输数据之前,要使用到Socket通信。对于Socket的理解,我把它理解成“中转站”,就像你买东西时用的快递一样。现在两主机之间想要传输数据,首先要创建这个“中转站”。

UDP的”中转站”是DatagramSocket,它可以接受和发送数据“包”。一般发送 时需要指定IP地址、端口号。而接收端可以不指定IP地址,但一定要监视端口号。

下面是给出几种DatagramSocket的常用构造方法:
DatagramSocket() 构造数据报套接字并将其绑定到本地主机上任何可用的端口。—->一般用于接收端
DatagramSocket(int port)创建数据报套接字并将其绑定到本地主机上的指定端口。—->一般用于发送端
**DatagramSocket(int port,InetAddress iaddr) 创建数据报套接字,将其绑定到指定的本地地址。

常用方法如下:
1、send(DatagramPacket dp):发送数据报
2、receive(DatagramPacket dp):接收数据报
3、getPort():返回套接字的端口
4、getInetAddress():返回套接字连接的地址
5、getLocalAddress():返回套接字绑定的本地地址
6、getLocalPort():返回套接字绑定的本地主机端口

使用UDP传输数据,一般就是:获取IP,发送数据和接收数据。
这里简单的提及一下DatagramPacket这个类,顾名思义,这个类的作用就是将数据打包。

常用的构造方法列一下:
DatagramPacket(byte[] buf, int length) :用来接收长度为 length 的数据包。
DatagramPacket(byte[] buf, int length, InetAddress address, int port) :用来将长度为 length 的包发送到指定主机上的指定端口。

UDP协议发送端的操作:
1、首先是建立Socket服务
2、将需要发送的数据打包,准备发送
3、使用send方法发送数据,不管结果~
4、最后要关闭资源
UDP协议接收端的操作:
1、建立Socket服务
2、使用receive方法接收数据
3、关闭资源(自行选择是否关闭,个人感觉,一些接收端的服务应该是需要常开的)
注:接收数据的时候,顺便将发送端的IP地址获取到是个好的习惯。

四、TCP协议

TCP:传输控制协议
介绍:是面向连接的,需要建立连接才能传输数据。
数据包size:建立连接后可进行大数据的传输
作用:常用于上传和下载
特点:建立三次握手连接,相当可靠,但传输效率稍低。

下面来总结一下TCP是怎么使用的吧。

使用TCP协议传输的第一步,也是创建socket服务。
注意!!!
这里有一点是必须要注意的:使用TCP协议时,发送端的使用的服务是Socket;接收端使用的服务是:ServerSocket;

socket的构造方法如下:
Socket(InetAddress addrs,int port):创建一个套接字,连接指定 IP 地址的指定端口号。
Scoket(String host,int port):创建一个套接字,连接指定主机的指定端口号

给出一些常用方法:
1、getInetAddress():返回套接字连接的地址
2、getInputStream():返回套接字的输入流
3、getOutputStream():返回套接字的输出流
…….
因为TCP协议常用于上传和下载,所以在这里IO流相关的知识也是需要学习的.

与UDP协议传输数据时的发送端和接收端不同的是,TCP协议传输数据时称为客户端和服务端。

客户端的步骤:

1、建立服务Socket
2、获取输出流,把数据变成字节数组, 通过输出流发送给服务端。
3、关闭输出流,获取输入流,获取反馈信息
4、关闭资源
服务端的步骤:
1、建立服务端的socket服务,ServerSocket(),并监听端口。
2、使用accept方法,获取连接过来的客户端对象。(没有连接时会等待,所以这个方法是阻塞式的)
3、客户端如果发过来数据,那么服务端要使用对应的客户端对象,并获取到该客户端对象的读取流,来读取发过来的数据。
4、关闭服务器(自行选择)

使用TCP协议时,必须要经历三次握手,为了便于理解,我对三次握手的解释如下:

Client:服务器哥哥,我想…联…你,你在不在?—–>发送请求链接
Server:客户端妹妹,我在的,你联过来吧,我在——–>服务器端链接确认
Client:Nice,那我联过来了!!!——->客户端确认链接

各位~懂了吗? 哈哈

在GitHub的练习Demo中,TCP相关的的练习代码还未上传。

在学习总结网络编程时,大量学习和参考了网上优秀的文章和代码,在此表示感激。

本文欢迎各位批评指教,我是java小菜鸟,在成神的道路上奔努力着。

各位大佬赏脸关注个人公众号:JavaDeveloperCorner

《java网络编程-学习总结》 微信公众号

    原文作者:温柔的石头闯天涯
    原文地址: https://www.jianshu.com/p/b8c427127cfa
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞