网络通信协议
网络通信协议有很多种,目前应用最广泛的是TCP/IP协议(Transmission Control Protocal/Internet Protoal传输控制协议/英特网互联协议),它是一个包括TCP协议和IP协议,UDP(User Datagram Protocol)协议和其它一些协议的协议组。 TCP/IP协议的层次结构比较简单,共分为四层,如图所示。
InetAddress
InetAddress类的一些常用方法
import java.net.InetAddress; import java.net.UnknownHostException; public class Demo01 { public static void main(String[] args) throws UnknownHostException { //获取本地计算机名和ip地址 InetAddress inet=InetAddress.getLocalHost(); System.out.println(inet); //通过主机名获取地址 InetAddress inet1=InetAddress.getByName("QH-20151127YHOW"); System.out.println(inet1); //通过对象获取主机名和ip地址 System.out.println(inet.getHostName()); System.out.println(inet.getHostAddress()); } }
UDP通信
DatagramPacket
构造方法
这样的对象只能用于接收端,不能用于发送端。
接收端不需要明确知道数据的来源,只需要接收到数据即可。
该对象通常用于发送端,因为在发送数据时必须指定接收端的IP地址和端口号,就好像发送货物的集装箱上面必须标明接收人的地址一样。
常用方法
DatagramSocket
构造方法
该构造方法用于创建发送端的DatagramSocket对象
该构造方法既可用于创建接收端的DatagramSocket对象,又可以创建发送端的DatagramSocket对象
常用方法
import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.util.Scanner; //发送端 public class UDPSend { public static void main(String[] args) throws IOException { //接收用户输入的数据 Scanner sc=new Scanner(System.in); String str=sc.nextLine(); //1.创建数据包对象,封装要发送的数据,接收端的ip,端口号 byte[] bytes=str.getBytes(); //创建InetAddress对象封装接收端的地址 InetAddress inet=InetAddress.getByName("192.168.1.174"); DatagramPacket dp=new DatagramPacket(bytes, bytes.length,inet,6000); //2.创建DatagramSocket对象,数据包的发送对象 DatagramSocket ds=new DatagramSocket(); //3.调用ds的send方法,发送数据包 ds.send(dp); //4.释放资源 ds.close(); } } //接收端 import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; public class UDPRecive { public static void main(String[] args) throws IOException { //1.创建数据包传输对象DatagramSocket绑定端口号 DatagramSocket ds=new DatagramSocket(6000); //2.创建字节数组来接收发过来的数据 byte[] bytes=new byte[1024]; //3.创建数据包对象DatagramPacket DatagramPacket dp=new DatagramPacket(bytes, bytes.length); //4.调用数据包传输对象的receive方法来接收数据 ds.receive(dp); //5.拆包 //获取数据长度 int length=dp.getLength(); String ip=dp.getAddress().getHostAddress(); //获取端口号 int port=dp.getPort(); System.out.println(ip+"端口号:"+port+"发送的内容为:"+new String(bytes,0,length)); //6.释放资源 ds.close(); } }