Java第二十五天学习笔记~(网络编程)
一、网络编程概述:
1、实现网络之间的通信,要具备三个要素,IP地址,端口,和通讯协议
IP地址:它是为主机编地址的方式.IP地址是32位的二进制数。它被分隔成4部分,每部分八个二进制位,中间用,隔开,因此每段最大为255。常见的IP地址有IPV4和IPV6.。IPV4为32位,分4段,每段最大值为255,但是随着互联网的发展,IP地址需求过大,因此产生了IPV6它是采用128位的地址长度。解决了IP地址不够用的问题
2、逻辑端口:用于标志进程的逻辑地址,不同的进程的标识,有效端口范围0-65535 ,其中0-1024一般用于系统或作为保留端口
3、同时我们也必须拥有一样的协议,国际组织定义了TCP/IP协议,这个协议大部分操作系统都具备,因此我们可以实现跟所有觉又此协议的计算机实现通信。常见的协议有TCP ,UDP
本地回环地址:127.0.0.1 主机名:localhost,可用于测试网卡 (ping 127.0.0.1)
二、 OSI七层和TCP/IP四层的关系
2.1 OSI引入了服务、接口、协议、分层的概念,TCP/IP借鉴了OSI的这些概念建立TCP/IP模型
2.2 OSI先有模型,后有协议,先有标准,后进行实践;而TCP/IP则相反,先有协议和应用再提出了模型,且是参照的OSI模型
2.3 OSI是一种理论下的模型,而TCP/IP已被广泛使用,成为网络互联事实上的标准
TCP:transmission control protocol 传输控制协议
UDP:user data protocol 用户数据报协议
网络模型
UDP:
1、将数据源和目的封装成数据包中,不需要建立连接
2、每个数据报的大小限制在64K内
3、因无连接,是不可靠协议
4、不需要建立连接,速度快
TCP:
1、建立连接,形成传输数据的通道
2、在连接中进行大量数据传输
3、通过三次握手确认连接,是可靠协议
4、必须建立连接,效率会稍低
屏蔽垃圾网站: 127.0.0.1 先访问本地的原理
UDP
Socket:
1、Socket就是为网络服务提供的一种机制
2、通信的两端都有Socket
3、网络通信其实就是Socket间的通信
4、数据在两个Socket间通过IO传输
UDP发送端:
需求:通过DUP传输方式,将一段文字数据发送出去
定义一个UDP的发送端
思路:
1、建立udpsocket服务
2、提供数据,并将数据封装到数据包中
3、通过socket服务的发送功能,将数据包发出去
4、关闭资源
package cn.itcast.net.p2.udp;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;
public class UDPSendDemo {
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
System.out.println("发送端启动");
/*1、建立UDP的socket服务
*2、将要发送的数据封装到数据包中
*3.通过udp的socket服务将数据包发送出去
*4.关闭socket服务
* */
//*1、建立UDP的socket服务
DatagramSocket ds=new DatagramSocket();
// *2、将要发送的数据封装到数据包中
String str="UOS传输演示:哥们来了!";
//使用DatagramPacket将数据封装到该对象包中
byte[] buf=str.getBytes();
DatagramPacket dp=new DatagramPacket(buf, buf.length,InetAddress.getByName("192.168.1.100"),10000);
//*3.通过udp的socket服务将数据包发送出去
ds.send(dp);
// *4.关闭socket服务
ds.close();
}
}
UDP接收端:
需求:定义一个应用程序,用于接受udp协议传输的数据并处理
思路:
1、定义udpsocket服务。通常会监听一个端口,其实就是给这个接收网络应用程序定义数字标识,
方便明确哪些数据过来,此应用程序可以处理
2、定义一个数据包,因为要存储接受到的字节数据,数据包对象中有更多功能,可以提取字节数据中的不同数据信息
3、通过socket服务的receive方法将收到的数据存入已定义好的数据包中
4、通过数据包对象的特有功能,将这些不同的数据取出,打印在控制台上
5、关闭资源
package cn.itcast.net.p2.udp;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;
public class UDOReceDemo {
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
System.out.println("接收端启动");
/*
* 建立UDP接收端的思路
* 1,建立udp socket服务
* 2,创建数据包,用于存储接收到的数据。方便用数据包的对象方法解析这些数据
* 3,使用socket服务的recrive方法将接收的数据存储到数据包中
* 4,通过数据包的方法解析数据包中的数据
* 5,关闭资源
*/
//1,建立udp socket服务
DatagramSocket ds=new DatagramSocket();
//2,创建数据包,用于存储接收到的数据。方便用数据包的对象方法解析这些数据
byte[] buf=new byte[1024];
DatagramPacket dp=new DatagramPacket(buf,buf.length);
//3,使用socket服务的recrive方法将接收的数据存储到数据包中
ds.receive(dp);
//4,通过数据包的方法解析数据包中的数据
String ip=dp.getAddress().getHostAddress();
int port=dp.getPort();
String text=new String(dp.getData(),0,dp.getLength());
System.out.println(ip+"+port+"+text);
//5,关闭资源
ds.close();
}
}