zoukankan      html  css  js  c++  java
  • 网络通信协议

    网络通信协议有很多种,目前应用最广泛的是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();
        }
    }
  • 相关阅读:
    mysql数据库的test类型
    jvm虚拟机分享课笔记
    内存模型中没有gc的是哪个
    jvm内存模型中-栈,方法区,程序计数器是线程安全的
    Random.nextInt()替换Math.random()
    异常抛出注意点
    缓存好文章
    java 实现serialVersionUID
    什么叫反向代理什么叫正向代理
    mysql count与sum的区别
  • 原文地址:https://www.cnblogs.com/zhaotao11/p/10250564.html
Copyright © 2011-2022 走看看