网络通信协议有很多种,目前应用最广泛的是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();
}
}