网络通信协议

网络通信协议有很多种,目前应用最广泛的是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();
    }
}
原文地址:https://www.cnblogs.com/zhaotao11/p/10250564.html