------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------
网络编程
一、概述
1、网络模型
1、OSI参考模型
2、TCP/IP参考模型
网络模型的七层概述:
物理层:主要定义物理设备标准,如网线的接口类型、光纤的接口类型、各种传输介质的传输速率等。它的主要作用是传输比特流(就是由1、0转化为电流强弱来进行传输,到达目的地后在转化为1、0,也就是我们常说的数模转换与模数转换)。这一层的数据叫做比特。
数据链路层:主要将从物理层接收的数据进行MAC地址(网卡的地址)的封装与解封装。常把这一层的数据叫做帧。在这一层工作的设备是交换机,数据通过交换机来传输。
网络层:主要将从下层接收到的数据进行IP地址(例192.168.0.1)的封装与解封装。在这一层工作的设备是路由器,常把这一层的数据叫做数据包。
传输层:定义了一些传输数据的协议和端口号(WWW端口80等),如:TCP(传输控制协议,传输效率低,可靠性强,用于传输可靠性要求高,数据量大的数据),UDP(用户数据报协议,与TCP特性恰恰相反,用于传输可靠性要求不高,数据量小的数据,如QQ聊天数据就是通过这种方式传输的)。主要是将从下层接收的数据进行分段和传输,到达目的地址后再进行重组。常常把这一层数据叫做段。
会话层:通过传输层(端口号:传输端口与接收端口)建立数据传输的通路。主要在你的系统之间发起会话或者接受会话请求(设备之间需要互相认识可以是IP也可以是MAC或者是主机名)。
表示层:主要是进行对接收的数据进行解释、加密与解密、压缩与解压缩等(也就是把计算机能够识别的东西转换成人能够能识别的东西(如图片、声音等)。
应用层: 主要是一些终端的应用,比如说FTP(各种文件下载),WEB(IE浏览),QQ之类的(可以把它理解成我们在电脑屏幕上可以看到的东西.就是终端应用)。
一般来说开发处于传输层和网际层,应用层为:FTP和HTTP协议等,传输层为:UDP和TCP等,网际层为:IP。
通常用户操作的是应用层,而编程人员需要做的是传输层和网际层,用户在应用层操作的数据,经过逐层封包,最后到物理层发送到另一个模型中,再进行逐层解包。
图示为:
2、网络通讯要素
1、IP地址。IP就是电脑的地址,
2、端口号。端口号用于标识进程的逻辑地址,不同进程的标识;端口号其实就是应用程序的地址
3、传输协议
特殊IP :
172.0.0.1 本地回环地址。
172.192.1.255 代表这个网路段中的广播地址
172.192.1.0 代表一个网络地址
一般情况下的端口:范围0——65535任选,但是0——1024被系统的程序所保留
常见的端口:web服务端口80;数据库端口3306
常见的协议:UDP协议,TCP协议
IP地址:InetAddress网络中设备的标识
3、InetAddress类
3.1、InetAddress类无构造函数;存在于java.net包。
3.2、常用方法
static InetAddressgetLocalHost() 返回本地主机的名称和IP地址
static InetAddressgetByName(String host) 获取给定主机的IP地址
static InetAddressgetAllByName(String host) 获取给定主机的所有IP地址
StringgetHostAddress() 返回 IP 地址字符串(以文本表现形式)。
String getHostName() 获取此 IP 地址的主机名。
3.3、常见异常
SocketException BindException
SecurityException UnknownHostException
3.4、如何获取任意一台主机的IP地址对象:
1)功能:返回InetAddress对象
2)对于任意主机,需要指定传入主机名的参数
注意:如果IP地址和对应的主机名,这种映射关系没有在网络上,就不会解析成功,返回的还是指定的IP。
4、传输协议UDP和TCP
4.1、UDP
UDP是面向无连接,明确了对方的端口,无论对方在不在网上,只管传输,不在就会丢失数据。只求速度,应用于网络视频会议和聊天等应用程序中。
特点:
1、每个数据包的大小在限制在64k内。
2、因为无连接,所以是不可靠协议。
3、因为不需要建立连接,所以速度快。
4.2、TCP
TCP是面向连接的,必须连接成功才能传输数据,一般应用于下载等程序上。
特点:
1、通过三次握手完成连接,是可靠协议
2、在连接中进行大数据量传输
3、必须建立连接,效率会稍低
注:三次握手:第一次本方发送请求,第二次对方确认连接,第三次本方再次确认连接成功。
二、传输协议
1、Socket
1、Socket被称之为插座,是网络服务提供的一种机制。
2、通信两端都要有Socket,才能建立服务。
3、网络通信其实就是Socket间的通信。数据在两个Socket间通过IO传输。
2、UDP具体应用
2.1、DatagramSocket类常用方法
构造函数:
DatagramSocket(int port)
方法:
DatagramSocket send(DatagramPacket e);
DatagramSocket receive(DatagramPacket e); 阻塞式方法
Void close()
2.2、DatagramPacket类常用方法
构造函数:
DatagramPacket(byte[] buf,int length,InetAddress address, int port)
DatagramPacket(byte[] buf,int length)
方法:
int getLength(); 返回将要发送或接收到的数据的长度
byte[] getData(); 返回数据缓冲区
2.3、发送步骤
1,建立updsocket服务。
2,提供数据,并将数据封装到数据包中。
3,通过socket服务的发送功能,将数据包发出去。
4,关闭资源。
代码示例:
2.4、接收步骤
1,定义udpsocket服务。通常会监听一个端口。其实就是给这个接收网络应用程序定义数字标识。方便于明确哪些数据过来该应用程序可以处理。
2,定义一个数据包,因为要存储接收到的字节数据。因为数据包对象中有更多功能可以提取字节数据中的不同数据信息。
3,通过socket服务的receive方法将收到的数据存入已定义好的数据包中。
4,通过数据包对象的特有功能。将这些不同的数据取出。打印在控制台上。
5,关闭资源。
代码示例:
UDP小练习
1、在发送端通过键盘写入数据,然后在接收端显示出来
2、编写一个聊天程序
代码示例:
3、TCP具体应用
3.1、客户端常用方法(Socket类)
构造函数:
Socket(String host,int port) 创建流套接字并连接到指定主机上的指定端口号。
常用方法:
voidclose() 关闭此套接字。
InetAddress getInetAddress()返回套接字连接的地址。
InputStream getInputStream()返回此套接字的输入流。
OutputStream getOutputStream()返回此套接字的输出流。
voidshutdownInput() 此套接字的输入流置于“流的末尾”。
void shutdownOutput()禁用此套接字的输出流。
3.2、服务端常用方法(ServerSocket类)
构造函数:
ServerSocket(int port) 创建绑定到特定端口的服务器套接字。
常用方法:
voidclose() 关闭此套接字。
InetAddressgetInetAddress()返回此服务器套接字的本地地址。
3.3、客户端具体步骤
1,建立socket服务。指定要连接主机和端口。
2,获取socket流中的输出流。将数据写到该流中。通过网络发送给服务端。
3,获取socket流中的输入流,将服务端反馈的数据获取到,并打印。
4,关闭客户端资源。
代码示例:
3.4、服务端具体步骤
1,建立服务端的socket服务。ServerSocket(); 并监听一个端口。
2,获取连接过来的客户端对象。 通过ServerSokcet的 accept方法。没有连接就会等,所以这个方法阻塞式的。
3,客户端如果发过来数据,那么服务端要使用对应的客户端对象,并获取到该客户端对象的读取流来读取发过来的数据。 并打印在控制台。
4,关闭服务端。(可选)
代码示例:
TCP练习
1、需求:建立一个文本转换服务器。客户端给服务端发送文本,服务端会将文本转成大写再返回给客户端。而且客户端可以不断的进行文本转换。当客户端输入over时,转换结束。
2、复制文件,通过客户端将目标文件传到服务端;
3、上传文件,通过客户端将目标图片传到服务端;
4、多客户并发上传文件,通过客户端将目标图片传到服务端;
5、多客户并发登陆
------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------