Java基础十七:网络编程入门InetAddress类、端口与协议、UDP通信程序、UDP接收数据、UDP通信程序练习

      最后更新:2022-08-02 23:57:55 手机定位技术交流文章

      网络编程入门

      网络编程的三个要素:IP地址、端口、协议(UDP协议、TCP协议)

      IP地址:是网络设备的唯一标识符

      IP地址分为两个类别:IPV4和IPV6

      ipconfig:查看主机IP地址

      PingIP地址:检查网络是否连接

      是一个返回地址,它可以代表主机地址,通常用于测试

      1,InetAddress类

      InetAddress:代表互联网协议(IP)地址,有三个常见的方法:

      静态InetAddress getByName(String host):确定主机名称的IP地址,主机名称可以是机器名称,也可以是IP地址

      getHostName():获取此IP地址的主机名称

      getHostAddress():返回在文本中显示的IP地址字符串

      public class InetAddressDemo1 {
      public static void main(String[] args) throws UnknownHostException{
      //获取主机的主机名称对象,两者都可用,并建议直接使用IP地址
      InetAddress address = InetAddress.getByName("XTZ-20191115MAD");
      InetAddress address1 = InetAddress.getByName("192.168.56.1");
      //获取主机名称
      String Name = address.getHostName();
      //获取主机IP地址
      String ip = address.getHostAddress();
      System.out.println("hostname:"+Name);
      System.out.println("IP地址:"+ip);
      }
      }

      2、端口、协议

      端口号:取值范围0~65535 其中 0~1023中间的值不能取,有特殊意义,只能取1024以上的端口号

      UDP协议:是一种不连接的通信协议,不能保证数据完整性。当重要的数据被传输时,不建议使用UDP协议

      TCP协议:是一种面向连接的通信协议,提供可靠、无误的数据传输,每连接有三个握手

      第一次握手:客户端向服务器发送连接请求并等待服务器确认

      第二次握手:服务器返回给客户端的响应,通知客户端已收到连接请求

      第三次握手:客户端再次向服务器发送确认消息,确认连接

      3、UDP通信程序

      发送UDP数据的步骤:

      1.为发送端创建一个接口对象(DatagramSocket)。

      2.创建数据并包装数据

      如何通过调用DatagramSocket对象发送数据

      4、关闭发送端

      //UDP发送数据
      public class UDPSendDemo1 {
      public static void main(String[] args) throws IOException {
      //1.为发送端创建一个接口对象(DatagramSocket)。
      DatagramSocket ds = new DatagramSocket();
      //2.创建数据并包装数据
      byte[] bys = "hello world".getBytes();
      /*int length = bys.length;
      InetAddress address = InetAddress.getByName("192.168.56.1");
      int port = 10086;*/

      //优化上面的代码
      //DatagramPacket dp = new DatagramPacket(bys,length,address,port);
      DatagramPacket dp = new DatagramPacket(bys,bys.length,InetAddress.getByName("192.168.56.1"),10086);
      //如何通过调用DatagramSocket对象发送数据
      ds.send(dp);
      ds.close();
      }
      }

      4、UDP接收数据

      1.创建接收端口对象(DtagramSocket)

      2.为接收数据创建数据包

      调用数据gramSocket对象来接收数据的方法

      分析数据包并显示数据在控制面板上

      5、关闭接收端

      //UDP接收数据
      public class UDPReceiveDemo2 {
      public static void main(String[] args) throws IOException {
      //1.创建接收端口对象(DtagramSocket)
      DatagramSocket ds = new DatagramSocket(10086);
      //2.为接收数据创建数据包
      byte[] bys = new byte[1024];
      DatagramPacket dp = new DatagramPacket(bys,bys.length);
      //调用数据gramSocket对象来接收数据的方法
      ds.receive(dp);
      //分析数据包并显示数据在控制面板上
      /* byte[] datas = dp.getData();// 此方法获取数据缓冲区
      Int len = dp.getLength();//返回发送的数据长度或实际接收的数据长度
      String dataString = new String(datas,0,len);
      System.out.println("data is:"+dataString);*/
      //优化上面的代码
      System.out.println("data is:"+new String(dp.GetData(),0,dp.getLength());
      //5、关闭接收端
      ds.close();
      }
      }

      UDP通讯程序实践

      /*UDP案例实践:
      UDP发送数据:数据来自键盘记录,直到输入数据886,发送数据结束
      UDP接收数据:因为接收器不知道发送器什么时候停止发送,它采用死循环接收
      * */


      //UDP发送数据
      public class UDPSend {
      public static void main(String[] args) throws IOException {
      //1.为发送端创建一个接口对象(DatagramSocket)。
      DatagramSocket ds = new DatagramSocket();
      //自封装的键盘记录数据
      BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
      String line;
      while((line = br.readLine())!=null){
      //输入数据为886,发送数据结束
      if("886".equals(line)){
      break;
      }
      //创建数据并包装数据
      byte[] bys = line.getBytes();
      DatagramPacket dp = new DatagramPacket(bys,bys.length, InetAddress.getByName("192.168.56.1"),12345);
      //如何通过调用DatagramSocket对象发送数据
      ds.send(dp);
      }
      //关闭发送端
      ds.close();

      }
      }

      //UDP接收数据
      public class UDPReceive {
      public static void main(String[] args) throws IOException {
      //创建接收端口对象(DtagramSocket)
      DatagramSocket ds = new DatagramSocket(12345);
      //因为你不知道发射器会发送多少数据,所以这是一个死循环,接收器没有关闭
      while(true) {
      //为接收数据创建数据包
      byte[] bys = new byte[1024];
      DatagramPacket dp = new DatagramPacket(bys, bys.length);
      //如何调用DatagramSocket对象接收数据
      ds.receive(dp);
      //分析数据包并显示数据在控制面板上
      System.out.println("data is:" + new String(dp.GetData(), 0, dp.getLength());
      }
      }
      }

      本文由 在线网速测试 整理编辑,转载请注明出处,原文链接:https://www.wangsu123.cn/news/31361.html

          热门文章

          文章分类