二十一章 网络通信
网络程序基础设计
1.网络
1.概念:两台或多台设备通过一定物理设备连接起来构成了网络
2.根据网络的覆盖范围不同,对网络进行分类:
局域网: 覆盖范围最小,仅仅覆盖一个教室或一个机房
广域网:覆盖范围最大,可以覆盖全国,甚至全球,万维网是广域网的代表
互联网就是由无数的局域网和广域网组成
2.网络协议
ip协议
1.概念: 用于唯一标识网络中的每台计算机/主机
2.查看ip地址: ipconfig
3.ip地址的表示形式:点分十进制 xx.xx.xx.xx
4.每一个十进制数的范围: 0~255
5.ip地址的组成=网络地址+主机地址,比如: 192.168.16.69
TCP协议
输控制协议 (Transmission Control Protocol)。TCP协议是面向连接的通信协议,即传输数据之前,在发送端和接收端建立逻辑连接,然后再传输数据,它提供了两台计算机之间可靠无差错的数据传输。
在TCP连接中必须要明确客户端与服务器端,由客户端向服务端发出连接请求,每次连接的创建都需要经过“三次握手”。
第一次握手,客户端向服务器端发出连接请求,等待服务器确认。
第二次握手,服务器端向客户端回送一个响应,通知客户端收到了连接请求。
第三次握手,客户端再次向服务器端发送确认信息,确认连接。整个交互过程如下图所示。
UDP协议
用户数据报协议(User Datagram Protocol)。UDP是无连接通信协议,即在数据传输时,数据的发送端和接收端不建立逻辑连接。
简单来说,当一台计算机向另外一台计算机发送数据时,发送端不会确认接收端是否存在,就会发出数据,同样接收端在收到数据时,也不会向发送端反馈是否收到数据。
由于使用UDP协议消耗资源小,通信效率高,所以通常都会用于音频、视频和普通数据的传输例如视频会议都使用UDP协议,因为这种情况即使偶尔丢失一两个数据包,也不会对接收结果产生太大影响。
端口号
可以唯一标识设备中的进程(应用程序)
用两个字节表示的整数,它的取值范围是0~65535。其中,0~1023之间的端口号用于一些知名的网络服务和应用,普通的应用程序需要使用1024以上的端口号。如果端口号被另外一个服务或应用所占用,会导致当前程序启动失败。
80:HTTP服务
8080:tomcat
3306:mysql
1521:oracle
443:HTTPS服务,安全加密的HTTP
21:FTP服务,文件传输
22:SSH服务,安全加密的远程登录
23:Telnet服务,远程登录
套接字
网络程序中的套接字(Socket)用于将应用程序与端口连接起来。套接字是一个假想的连接装置,就像插座一样可连接电器与电线,如图21.4所示。Java将套接字抽象化为类,程序设计者只需创建Socket类对象,即可使用套接字。
TCP程序设计
TCP 网络程序设计是指利用Socket类编写通信程序。利用TCP协议进行通信的两个应用程序是有主次之分的,一个称为服务器程序,另一个称为客户机程序,两者的功能和编写方法大不一样。
ServerSocket 类
java.net包中的ServerSocket类用于表示服务器套接字,其主要功能是等待来自网络上的“请求”。
它可通过指定的端口来等待连接的套接字。服务器套接字一次可以与一个套接字连接。如果多台客户机同时提出连接请求,服务器套接字会将请求连接的客户机存入列队中,然后从中取出一个套字。与服务器新建的套接字连接起来。若请求连接数大于最大容纳数,则多出的连接请求被拒绝。默认大小是50。 ??
UDP程序
用户数据报协议(UDP)是网络信息传输的另一种形式。基于UDP的通信和基于TCP的通信不同,基于UDP的信息传递更快,但不提供可靠性保证。使用UDP传递数据时,用户无法知道数据能否正确地到达主机,也不能确定到达目的地的顺序是否和发送的顺序相同。虽然UDP是一种不可靠的协议,但如果需要较快地传输信息,并能容忍小的错误,可以考虑使用UDP。
基于 UDP通信的基本模式如下:
?将数据打包(称为数据包),然后将数据包发往目的地。
?接收别人发来的数据包,然后查看数据包。
发送数据包的步骤如下:
(1)使用DatagramSocket()创建一个数据包套接字。
(2)使用DatagramPacket(byte[] buf, int offset, int length, InetAddress address, int port)创建要发的数据包。
(3)使用DatagramSocket类的send()方法发送数据包。
接收数据包的步骤如下:
(1)使用DatagramSocket(int port)创建数据包套接字,绑定到指定的端口。
(2)使用DatagramPacket(byte[] buf, int length)创建字节数组来接收数据包。
(3)使用DatagramPacket类的receive(方法接收UDP包。
注意
DatagramSocket类的receive()方法接收数据时,如果还没有可以接收的数据,在正常情况下 receive()方法将阻害,一直等到网络上有数据传来,receive()方法接收该数据并返回。如果网络上没有数据发送过来,receive()方法也没有阻塞,肯定是程序有问题,大多数情况下是因为使用了一个被其他程序占用的端口号。
?DatagramPacket类
javanet 包的 DatagramPacket类用来表示数据包。DatagramPacket类的构造方法如下:?DatagramPacke1(byte]buf, int length).
DatagramPackel(byse[] buf,int length,InetAddress address, int port).
第一种构造方法在创建DatagramPacket对象时,指定了数据包的内存空间和大小。第二种构造方法不仅指定了数据包的内存空间和大小,还指定了数据包的目标地址和端口。在发送数据时,必须指定接收方的Socket地址和端口号,因此使用第二种构造方法可创建发送数据的DatagramPacket对象
DatagramSocket 类
java.net 包中的DatagramSocket类用于表示发送和接收数据包的套接字。该类的构造方法如下:
DatagramSocket()。
DatagramSocket(int port)。
DatagramSocket(int port, InetAddress addr)。
第一种构造方法创建DatagramSocket对象,构造数据报套接字,并将其绑定到本地主机任何可用的端口上。第二种构造方法创建DatagramSocket对象,创建数据报套接字,并将其绑定到本地主机的指定端口上。第三种构造方法创建DatagramSocket对象,创建数据报套接字,并将其绑定到指定的端口和指定的本地地址上。第三种构造函数适用于有多块网卡和多个IP地址的情况。
UDP通信 :主要的方向是一对多通信方式 UDP通信就是一下子可以通信多个对象,这就是UDP对比TCP的优势,UDP它的原理 ?就是开启服务端 然后客户端依次连接客户端 ?于TCP不同的是他不会一个一个跟客户端说而是跟微信群聊一样它在给这些客户端发送消息 缺点 :服务端会发送消息给到客户端 ?但是有些客户端并不会接收到消息, 或者没有看到消息 ?。这就是UDP的缺点, 不能保证所有客户端都能收到消息。UDP对比于TCP的缺点,就是不能保证每一个人都能够接收到消息 ,但是优点就是可以一下子跟好多个对象进行通信,但是不能保证可靠度。
?
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!