Java学习第十三天——网络编程

前言:

什么是网络编程?

可以让设备中的程序与网络上其他设备中的程序进行数据交互(实现网络通信的)。

Java提供了哪些网络编程的解决方案

java.net.*包下提供了网络编程的解决方案!

基本的通信架构

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

无论是CS架构,还是BS架构的软件都必须依赖网络编程!

网络通信三要素

IP地址

IP(Internet Protocol):全称”互联网协议地址”,是分配给上网设备的唯一标志。

IP地址有两种形式:IPv4、IPv6

IPv4

IPv6地址

IPv6:共128位,号称可以为地球每一粒沙子编号。

IPv6分成8段表示,每段每四位编码成一个十六进制位表示, 数之间用冒号(:)分开。

IP域名

公网IP, 内网IP

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

192.168. 开头的就是常见的局域网地址,范围即为192.168.0.0--192.168.255.255,专门为组织机构内部使用。

特殊IP地址:

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

IP常用命令:

ipconfig:查看本机IP地址。

ping IP地址:检查网络是否连通。

InetAddress

代表IP地址。

InetAddress的常用方法如下

总结:

1.说说网络通信至少需要几个要素

IP、端口、协议。

2.IP地址是做什么的,具体有几种

定位网络上的设备的,有IPv4 , IPv6.

3.如何查看本机IP地址,如何看是否与对方互通

ipconfig (WinOS) ifconfig(Mac)

ping 192.168.10.23

4.本机IP是谁?

127.0.0.1或者是localhost

5.IP地址的代表类是谁?

InetAddress类

6.如何获取本机IP对象

public static InetAddress getLocalHost()

7.如何判断与该IP地址对象是否互通?

public booleanisReachable(int timeout)

端口号

端口

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

分类

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

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

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

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

总结:

1.端口号的作用是什么?

唯一标识正在计算机设备上运行的进程(程序)

2.一个设备中,能否出现2个应用程序的端口号一样,为什么?

不可以,如果一样会出现端口冲突错误。

协议

通信协议

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

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

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

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

传输层的2个通信协议

TCP(Transmission Control Protocol) :传输控制协议。

UDP(User Datagram Protocol):用户数据报协议;

TCP协议(通信效率相对不高!网页、文件下载、支付)

特点:面向连接、可靠通信。

TCP的最终目的:要保证在不可靠的信道上实现可靠的传输。

TCP主要有三个步骤实现可靠传输:三次握手建立连接,传输数据进行确认,四次挥手断开连接。

UDP协议(通信效率高!语音通话 视频直播)

特点:无连接、不可靠通信。

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

发送方不管对方是否在线,数据在中间丢失也不管,如果接收方收到数据也不返回确认,故是不可靠的 。

总结:

1、通信协议是什么?

计算机网络中,连接和通信数据的规则被称为网络通信协议。

2、TCP通信协议的特点是什么样的?

它是一种面向连接的可靠通信协议。

传输前,采用“三次握手”方式建立连接,点对点的通信,所以可靠。

在连接中可进行大数据量的传输。

通信效率较低。

3、UDP协议的特点是什么

用户数据报协议(User Datagram Protocol)

UDP是面向无连接,不可靠传输的通信协议。

速度快,有大小限制一次最多发送64K,数据不安全,易丢失数据。

TCP通信-快速入门

TCP通信

特点:面向连接、可靠通信。

通信双方事先会采用“三次握手”方式建立可靠连接,实现端到端的通信;底层能保证数据成功传给服务端。

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

TCP通信之-客户端开发

客户端程序就是通过java.net包下的Socket类来实现的。

客户端发送消息

客户端实现步骤

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

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

③使用字节输出流完成数据的发送。

④释放资源:关闭socket管道。

总结:

1.TCP通信,客户端的代表类是谁?

Socket类

public Socket(String host , int port)

2.TCP通信,如何使用Socket管道发送、接收数据 ?

OutputStreamgetOutputStream():获得字节输出流对象(发)

InputStreamgetInputStream():获得字节输入流对象(收)

TCP通信-服务端程序的开发

服务端是通过java.net包下的ServerSocket类来实现的。

ServerSocket

服务端实现接收消息

服务端实现步骤

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

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

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

④释放资源:关闭socket管道

总结:

1.TCP通信服务端用的类是谁?

ServerSocket类,注册端口。

调用accept()方法阻塞等待接收客户端连接。得到Socket对象。

2.TCP通信服务端的开发步骤是什么?

TCP通信-多发多收

使用TCP通信实现:多发多收消息

使用TCP通信实现:多发多收消息。

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

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

总结:

1.本次多发多收是如何实现的?

客户端使用循环反复地发送消息。

服务端使用循环反复地接收消息。

TCP通信-同时接收多个客户端(群聊)

总结:

1、群聊是什么含义?怎么实现?

是指一个客户端把消息发出去,其他在线的全部客户端都可以收到消息。

需要用到端口转发的设计思想。

服务端需要把在线的Socket管道存储起来,一旦收到一个消息要推送给其他管道

UDP通信-快速入门

UDP通信

特点:无连接、不可靠通信。

不事先建立连接;发送端每次把要发送的数据(限制在64KB内)、接收端IP、等信息封装成一个数据包,发出去就不管了。

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

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

DatagramPacket:创建数据包

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

客户端实现步骤

①创建DatagramSocket对象(客户端对象)——> 扔韭菜的人

②创建DatagramPacket对象封装需要发送的数据(数据包对象) ——> 韭菜盘子

③使用DatagramSocket对象的send方法,传入DatagramPacket对象 ——> 开始抛出韭菜

④释放资源

服务端实现步骤

①创建DatagramSocket对象并指定端口(服务端对象)——> 接韭菜的人

②创建DatagramPacket对象接收数据(数据包对象)——> 韭菜盘子

③使用DatagramSocket对象的receive方法,传入DatagramPacket对象 ——> 开始接收韭菜

④释放资源

总结:

1.实现UDP通信,如何创建客户端、服务端对象?

public DatagramSocket():创建发送端的Socket对象

public DatagramSocket(int port):创建接收端的Socket对象

2.数据包对象是哪个?

DatagramPacket

3.如何发送、接收数据?

使用DatagramSocket的如下方法:

public void send(DatagramPacketdp):发送数据包

public void receive(DatagramPacketdp) :接收数据包

UDP通信-多发多收

客户端可以反复发送数据

客户端实现步骤

①创建DatagramSocket对象(发送端对象)——> 扔韭菜的人

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

③如果用户输入的不是exit, 把数据封装成DatagramPacket ——> 韭菜盘子

④使用DatagramSocket对象的send方法将数据包对象进行发送 ——>开始抛出韭菜

⑤释放资源

接收端可以反复接收数据

接收端实现步骤

①创建DatagramSocket对象并指定端口(接收端对象)——> 接韭菜的人

②创建DatagramPacket对象接收数据(数据包对象)——>韭菜盘子

③使用DatagramSocket对象的receive方法传入DatagramPacket对象 ——> 开始接收韭菜

④使用while死循环不断的进行第3步

总结:

1.UDP的接收端为什么可以接收很多发送端的消息?

接收端只负责接收数据包,无所谓是哪个发送端的数据包。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值