-----------android培训、java培训、java学习型技术博客、期待与您交流!------------
网络参考模型:
OSI参考模型 TCP/IP协议
应用层 应用层
表示层 传输层
会话层 网际层
传输层 主机至网络层
网络层
数据链路层
物理层
网络模型7层概述:
1.物理层:主要定义物理设备标准,如网线的接口类型、光纤的接口类型、各种传输介质的传输速率等。它的主要作用是传输比特流(就是由1、0转化为电流强弱来进行传输,到达目的地后在转化为1、0,也就是我们常说的数模转换与模数转换)。这一层的数据叫做比特。
2. 数据链路层:主要将从物理层接收的数据进行MAC地址(网卡的地址)的封装与解封装。常把这一层的数据叫做帧。在这一层工作的设备是交换机,数据通过交换机来传输。
3. 网络层:主要将从下层接收到的数据进行IP地址(例192.168.0.1)的封装与解封装。在这一层工作的设备是路由器,常把这一层的数据叫做数据包。
4. 传输层:定义了一些传输数据的协议和端口号(WWW端口80等),如:TCP(传输控制协议,传输效率低,可靠性强,用于传输可靠性要求高,数据量大的数据),UDP(用户数据报协议,与TCP特性恰恰相反,用于传输可靠性要求不高,数据量小的数据,如QQ聊天数据就是通过这种方式传输的)。主要是将从下层接收的数据进行分段和传输,到达目的地址后再进行重组。常常把这一层数据叫做段。
5.会话层:通过传输层(端口号:传输端口与接收端口)建立数据传输的通路。主要在你的系统之间发起会话或者接受会话请求(设备之间需要互相认识可以是IP也可以是MAC或者是主机名)
6.表示层:主要是进行对接收的数据进行解释、加密与解密、压缩与解压缩等(也就是把计算机能够识别的东西转换成人能够能识别的东西(如图片、声音等)。
7.应用层: 主要是一些终端的应用,比如说FTP(各种文件下载),WEB(IE浏览),QQ之类的(可以把它理解成我们在电脑屏幕上可以看到的东西.就是终端应用)。
网络编程的三要素:IP地址,端口号,协议
InetAddress:此类表示互联网(IP)协议
InetAddress staticgetByName(String hostName)
主机名:getHostName()
主机IP地址:getHostAddress();
端口:
物理端口:网卡口
逻辑端口:由操作系统定义并维护,Windows下逻辑端口范围:0--65535
我们讲的端口就是"逻辑端口"
每个网络应用程序都至少占用1个逻辑端口,也可以同时占用多个
每个端口,同一时刻只能被一个应用占用
有效端口:0-65535,其中0--1024系统使用或保留端口
协议:
网络传输协议:UDP,TCP,HTTP,FTP……
UDP:
1),先将数据打包
2),不需要链接,可以没有接收方,发送方直接发送即可。
3),由于不需要建立连接,不安全的,速度快。
4),发送的数据大小有限制:64k
类似于:广播、电视
TCP:
1),面向连接的,必须要有接收方。形成传输数据的通道。
2),安全,速度慢--连接时,需要双方发送握手信息。(三次握手)
类似于:打电话
UDP传输:
UDP协议发送数据:
1,创建发送端Socket对象 DatagramSocket
2,创建数据,并将数据打包Datagrampacket : DatagramPacket(byte[] buf, int length, InetAddress address, intport)// 构造数据报包,用来将长度为length 的包发送到指定主机上的指定端口号。(目标IP,目标端口,信息内容,信息长度)
3,调用Socket对象的发送方法发送数据: send()方法
4,释放资源
UDP协议接收数据:
1,创建接收端Socket对象:DatagramSocket(监听端口)
2, 创建数据报,接收发送端的内容。
3,调用Socket对象的接收方法接收数据。receive()方法
4,解析数据,显示在控制台:通过DategramPacket对象获取信息
TCP传输:面向连接的,一定要有接收方存在
TCP协议发送数据:
1,创建TCP客户端的Socket对象 构造方法:Socket(Stringhost,int fort);
2,获取输出流,写数据
3,释放资源
TCP协议接收数据
创建TCP服务器端的Socket对象 ServerSocket(监听端口)
监听客户端连接 : accept()方法会返回一个Socket对象
获取输入流,读取数据
释放资源
具体编程思路:
UDP协议编程:
1.发送端:
1.实例化DatagramSocket();
DatagramSocketsocket = new DatagramSocket();
2.准备数据:
IP: InetAddressadd = InetAddress("Lenovo-PC");
端口: int port = 8888;
数据: byte[] byteArray ="你好".getBytes();
3.准备数据报:
DatagramPacketpacket = new DatagramPacket(byteArray,
byteArray.length,
add,port);
4.发送:
socket.send(packet);
5.释放资源:
socket.close();
2.接收端:
//1.实例化DatagramSocket
DatagramSocketsocket = new DatagramSocket(8888);
//2.准备一个空的byte[]数组
byte[]byteArray = new byte[1024];
//3.准备一个空的DatagramPacket
DatagramPacketpacket = new DatagramPacket(byteArray,byteArray.length);
//4.等待信息
socket.receive(packet);
//5.获取信息
byte[]infoArray = packet.getData();
Stringinfo = new String(infoArray,0,packet.getLength());
System.out.println("获取的信息:" + info);
//6.释放资源
socket.close();
三.TCP协议编程:
1.发送端:
//1.实例化一个Socket
Socketsocket = new Socket("192.168.38.91",8888);
//2.获取输出流
OutputStreamout = socket.getOutputStream();
//3.输出,一次输出一个字节数组
out.write("你好".getBytes());
//4.释放资源
out.close();
socket.close();
2.接收端:
//1.实例化一个ServerSocket
ServerSocketserver = new ServerSocket(8888);
//2.获取输入流
InputStreamin = socket.getInputStream();
//3.一次读取一个字节数组
byte[]byteArray = new byte[1024];
intlen = in.read(byteArray);
Strings = new String(byteArray,0,len);
System.out.println("接收到的数据:" + s);
//4.释放资源
in.close();
sever.close();
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------