JAVA:网络编程

基本通信架构

基本的通信架构有两种形式:CS架构(Client客户端/Server服务端)、BS架构(Browser浏览器/Server服务端)。

网络通信三要素

IP地址:设备在网络中的地址,唯一的标识

端口号:应用程序在设备中唯一的标识

协议:连接和数据在网络中传输的规则

IP地址

 IP(Internet Protocol):全称互联网协议地址”,是分配给上网设备的唯一标志。IP地址有两种形式:IPv4、IPv6

IPV4地址由32个比特位(4个字节)组成,由于采用二进制太不容易阅读了,于是就将每8位看成一组,把每一组用十进制表示(叫做点分十进制表示法)。如果想看本机ip地址,在命令行窗口输入“ipconfig”查看。

IPv6:共128位,号称可以为地球每一粒沙子编号,IPv6分成8段表示,每段每四位编码成一个十六进制位表示, 数之间用冒号(:)分开。 

公网IP、内网IP

公网IP:是可以连接互联网的IP地址;内网IP:也叫局域网IP,只能组织机构内部使用。

特殊IP地址

127.0.0.1localhost:代表本机IP,只会寻找当前所在的主机。

InetAddress

InetAddress代表IP地址

InetAddress的常用方法如下

public static InetAddress getLocalHost():获取本机IP,会以一个inetAddress的对象返回

public static InetAddress getByName​(String host):根据ip地址或域名,返回一个inetAdress对象

public String getHostName​():获取该ip地址对象对应的主机名。

public String getHostAddress​():获取该ip地址对象中的ip地址信息。

public boolean isReachable(int timeout):在指定毫秒内,判断主机与该ip对应的主机是否能连通

端口

标记正在计算机设备上运行的应用程序的,被规定为一个 16 位的二进制,范围是 0~65535

分类

周知端口:0~1023,被预先定义的知名应用占用(如:HTTP占用 80FTP占用21

注册端口1024~49151,分配给用户进程或某些应用程序。

动态端口:4915265535,之所以称为动态端口,是因为它 一般不固定分配某种进程,而是动态分配

注意:一般自己开发的程序选择注册端口,且一个设备中不能出现两个程序端口号一样,否则会报错。

协议

通信协议

网络上通信的设备,事先规定的连接规则,以及传输数据的规则被称为网络通信协议

开放式网络互联标准:OSI网络参考模型

OSI网络参考模型:全球网络互联标准

TCP/IP网络模型:事实上的国际标准 

OSI网络参考模型TCP/IP网络模型各层对应面向操作
应用层应用层HTTP、FTP、SMTP...应用程序需要关注的:浏览器,邮箱。程序员一般在这一层开发
表示层
会话层
传输层传输层UDP、TCP选择使用的TCP , UDP协议
网络层网络层 IP...封装源和目标IP
数据链路层数据链路层+物理比特流物理设备中传输
物理层

传输层的两个通信协议

UDP(User Datagram Protocol):用户数据报协议; TCP(Transmission Control Protocol) :传输控制协议

UDP协议

特点:无连接、不可靠通信,通信效率高,适合语音通话,视频直播等

不事先建立连接,数据按照包发,一包数据包含:自己的IP、程序端口、目的地IP、程序端口和数据(限制在64KB内)。

TCP协议

特点:面向连接、可靠通信,通信效率相对不高,适合网页,文件下载,支付等

TCP的最终目的要保证在不可靠的信道上实现可靠的传输。TCP主要有三个步骤实现可靠传输,三次握手确认,传输数据进行确认,四次挥手断开连接

UDP通信

java提供了一个java.net.DatagramSocket实现UDP通信。

DatagramSocket: 用于创建客户端、服务端

构造器

public DatagramSocket()​:创建客户端Socket对象, 系统会随机分配一个端口号。

public DatagramSocket(int port):创建服务端Socket对象, 并指定端口号。

方法

public void send(DatagramPacket dp)发送数据包

public void receive(DatagramPacket p) 使用数据包接收数据

DatagramPacket:创建数据包

构造器

public DatagramPacket(byte[] buf, int length, InetAddress address, int port):创建发出去的数据包对象

public DatagramPacket(byte[] buf, int length):创建用来接收数据的数据包

方法

public int getLength():获取数据包,实际接收到的字节个数。

使用UDP通信实现:发送消息、接收消息

客户端实现步骤

1.创建DatagramSocket对象(客户端对象)

2.创建DatagramPacket对象封装需要发送的数据(数据包对象)

3.使用DatagramSocket对象的send方法,传入DatagramPacket对象

4.释放资源

服务端实现步骤

1.创建DatagramSocket对象并指定端口(服务端对象)

2.创建DatagramPacket对象接收数据(数据包对象)

3.使用DatagramSocket对象的receive方法,传入DatagramPacket对象

4.释放资源

可以反复发送数据

客户端实现步骤

1.创建DatagramSocket对象(发送端对象)

2.使用while死循环不断的接收用户的数据输入,如果用户输入的exit则退出程序

3.如果用户输入的不是exit,  把数据封装成DatagramPacket

4.使用DatagramSocket对象的send方法将数据包对象进行发送

5.释放资源

服务端实现步骤

1.创建DatagramSocket对象并指定端口(接收端对象)

2.创建DatagramPacket对象接收数据(数据包对象)

3.使用DatagramSocket对象的receive方法传入DatagramPacket对象

4.使用while死循环不断的进行第3

          

TCP通信

Java提供了一个java.net.Socket实现TCP通信

TCP通信客户端开发:客户端程序就是通过java.net包下的Socket来实现的。

构造器

public Socket(String host , int port):​根据指定的服务器ip、端口号请求与服务端建立连接,连接通过,就获得了客户端socket

方法

public OutputStream getOutputStream():获得字节输出流对象

public InputStream getInputStream():获得字节输入流对象

客户端实现步骤

1.创建客户端的Socket对象,请求与服务端的连接

2.使用socket对象调用getOutputStream()方法得到字节输出流。

3.使用字节输出流完成数据的发送

4.释放资源:关闭socket管道。

TCP通信服务端开发:l服务端是通过java.net包下的ServerSocket类来实现的。

public ServerSocket(int port):为服务端程序注册端口

public Socket accept():阻塞等待客户端的连接请求,一旦与某个客户端成功连接,则返回服务端这边的Socket对象。

服务端实现步骤

1.创建ServerSocket对象,注册服务端端口。

2.调用ServerSocket对象的accept()方法,等待客户端的连接,并得到Socket管道对象。

3.通过Socket对象调用getInputStream()方法得到字节输入流、完成数据的接收。

4.释放资源:关闭socket管道

TCP通信实现:多发多收

1.客户端使用死循环,让用户不断输入消息。

2.服务端也使用死循环,控制服务端收完消息,继续等待接收下一个消息

BS架构的基本原理

HTTP协议规定:响应给浏览器的数据格式必须满足如下格式

协议版本空格状态码空格状态符回车换行
头部字段名回车换行
......
头部字段名回车换行
回车换行
响应正文(真正给浏览器展示的网页数据)

客户端使用浏览器发起请求(不需要开发客户端)

服务端必须按照HTTP协议响应数据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值