根据网络来进行的数据传输
分层
物理层
数据链路层
网络层
传输层(协议UDP、TCP)
会话层
表示层
应用层
IP
IP地址-----确定网络中主机的位置
IPv4由四位0~255的数字组合而成
10.8.13.1
域名
不会重复,可以映射成对应的IP地址
端口
计算机和外界进行数据交互的媒介
端口号(0-65535)
0-1024之间的端口号基本已经被系统提前占用,推荐使用1024后面的端口号
InetSocketAddress
提供IP和端口号
1)创建对象 InetSocketAddress isa=new InetSocketAddress(“localhost”,8090)
注:localhost解析成的IP是127.0.0.1,—永远指向本地
2)获取IP地址
isa.getAddress();
3)获取主机名
isa.getHostName();
UDP
底层基于流
传输时不建立连接,传输不安全但是效率较高
底层是很据数据包来做数据传输(数据包最大64KB)
适用于:视频、语音、直播等等
DatagramSocket、DatagramPacket
发送端
1、创建UDP发送端对象
2、创建数据包,准备数据并且指定IP和端口号
3、发送数据包
4、关流
DatagramSocket ds=new DatagramSocket();
DatagramPocket dp=new DatagramPocket("zuo".getBytes(),"zuo".getBytes().length,new InetSocketAddress("127.0.0.1",8091));
ds.send(dp);
ds.close;
接收端
1、创建UDP接收端对象并且监听端口号
2、创建数据包来接收数据
3、接收数据
4、关流
5、解析数据包里接收的数据
DatagramSocket ds=new DatagramSocket(8091);
DatagramPocket dp=new DatagramPocket(new Byte[10],10);
ds.receive(dp);
ds.close();
dp.getAddress();
new String(dp.getData(),0,dp.getLength());
TCP
底层基于流
传输需要建立连接(三次握手),传输过程安全但是传输效率较低
底层是根据字节流来进行数据传输(理论上不限制传输数据的大小)
适用场景:聊天、文件上传和下载等等
Socket、ServerSocket
客户端
1.创建TCP客户端对象
2.发起连接
3.获取自带的字节输出流
4.写出数据
5.通知服务器端数据已经写出完毕
6.关流
Socket s=new Socket();
s.connect(new InetsocketAddress("127.0.0.1",8091));
OutputStream os=s.getOutputStream();
os.write("yu".getBytes());
s.shutdownOutput();
s.close();
服务器端
1、创建TCP服务器端对象并且监听端口号
2、接受连接
3、获取自带的字节输入流
4、读取数据
5、通知客户端数据已经接收完毕
6、关流
ServeSocket ss=new ServerSocket(8091);
Socket s=ss.accept();
InputStream is=s.getInputStream();
byte[] bs=new byte[100];
int len=-1;
while(((len=is.read(bs))!=-1){
System.out.println(new String(bs,0,len));}
s.shutdownInput();
s.close;
ss.close;}}