------- android培训、java培训、期待与您交流!----------
1、
OSI的网络模型分为七层:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层。
Linux的网络模型分为四层:应用层、传输层、网际层、网络接口层。
2、
一台计算机想要通信首先要找到目标计算机,只要找到目标计算机才有可能实现通信,这就有IP的概念,通信的计算机之间是通过IP地址来查找相应的目标计算机的。IP地址分为两种:IPV4和IPV6。IPV4是由四个符数据组成的,IPV6是由六个字符数据组成。每个字符数据最大值为255。两台计算机通过网线和无线路由器连接后,遵守TCP/IP协议的前提下,通过IP地址来进行通信。每台计算机又有很多的应用程序,如果一台计算机发送数据到另外一台计算机上,是由哪个应用程序来接收数据呢?这个就需要有端口号进行区分。计算机一共分配了65536个端口,其中0~1024系统使用或保留端口。每一个应用程序都有一个自己的端口,通过这个端口来决定传输数据的是由哪个应用程序来接收。呢么,计算机想要通信,首先要符合一定的协议,让后是有一个IP地址,通过端口号来区分具体是由哪个应用程序来处理数据。计算机传输数据的时候,遵守了很多协议,常见的协议有:UDP和TCP。
UDP的特点:
1)
2)
3)
4)
TCP的特点:
1)
2)
3)
4)
3、
和网络编程有关的基于API中的java.net包中,该包中包含了基本的网络编程实现,该包是网络编程的基础。
基础的网络类:InetAddress类。该类的功能是代表一个IP地址,并将IP地址和域名相关的操作方法包含在该类的内部。
代码如下:
import java.net.*;
public class InetAddressDemo {
public static void main(String[] args) {
try{
//使用域名创建对象
InetAddress inet1 = InetAddress.getByName("PC");
System.out.println(inet1);
//使用IP创建对象
InetAddress inet2 = InetAddress.getByName("127.0.0.1");
System.out.println(inet2);
//获得本机地址对象
InetAddress inet3 = InetAddress.getLocalHost();
System.out.println(inet3);
//获得对象中存储的域名
String host = inet3.getHostName();
System.out.println("域名:" + host);
//获得对象中存储的IP
String ip = inet3.getHostAddress();
System.out.println("IP:" + ip);
}catch(Exception e){}
}
}
运行结果:
PC/127.0.0.1
/127.0.0.1
PC/127.0.0.1
域名: PC
IP:127.0.0.1
UDP协议通信使用DatagramSocket与DatagramPacket类。
步骤:
1)
发送端实现代码:DatagramSocket ds = new DatagramSocket();
如果是发送端,呢么这个端口可以不进行绑定,使用内核自由分配的端口号即可。如果是接收端的话,这个端口必须进行绑定到特殊的端口。接收端实现代码:DatagramSocket ds = new DatagramSocket(端口号);
2)
如果是发送端的话,首先要有数据,由于网络传输的是二进制数据,所以在定义网络包时也要定义成二进制的,实现代码:
发送端数据包:byte[] buf = “数据”.getBytes();
接收端数据包:byte[] buf = new byte[1024];
有了数据和数据缓存区后,可以把这个数据个数据缓存区封装成网络包:
发送端的数据包:DatagramPacket dp = new DatagramPacket(buf,buf.length,InetAddress.getAddress(“127.0.0.1”),10000);
接收端的数据包:DatagramPaket dp = new DatagramPaket(buf,buf.length);
3)
根据Socket的方法,对数据包发送和接收操作,实现代码:
发送端:ds.send(dp);
接收端:ds.receive(dp);//接收到的数据包放到接收端定义的数据包缓存区中。
4)
ds.close();
TCP协议通信使用Socket和ServerSocket类。TCP和UDP的区别在于TCP是建立连接,UDP是不需要连接,TCP操作的是端口输入输出流对象,UDP操作的是DatagramPacket包。TCP通信时不需要建立包,直接获取输入输出流进行操作。
步骤:
1)
客户端:Socket s = new Socket();
服务端:ServerSocket s = new ServerSocket (端口);
2)
通过服务端ServerSocket对象的accetp方法获取端口连接,在获取请求端口的信息后,建立连接。
3)
客户端获取Socket的getOutputStream()方法,通过该方法获取输出数据流。
服务端获取Socket的getInputStream()方法,获取读取数据流。
4)
客户端:s.close();
服务端:s.close();ss.close();