Java Socket编程实例(二)- UDP基本使用

 更新时间:2016年06月15日 09:26:12   作者:kingxss  
这篇文章主要讲解Java Socket编程中UDP的基本使用,希望能给大家做一个参考。

一.服务端代码:

import java.io.*; 
import java.net.*; 
 
public class UDPEchoServer { 
 
  private static final int ECHOMAX = 255; // Maximum size of echo datagram 
 
  public static void main(String[] args) throws IOException { 
 
    int servPort = 5500; // Server port 
 
    DatagramSocket socket = new DatagramSocket(servPort); 
    DatagramPacket packet = new DatagramPacket(new byte[ECHOMAX], ECHOMAX); 
 
    while (true) { // Run forever, receiving and echoing datagrams 
      socket.receive(packet); // Receive packet from client 
      System.out.println("Handling client at " + packet.getAddress().getHostAddress() + " on port " + packet.getPort()); 
      socket.send(packet); // Send the same packet back to client 
      packet.setLength(ECHOMAX); // Reset length to avoid shrinking buffer 
    } 
    /* NOT REACHED */ 
  } 
} 

二.客户端代码:

import java.net.*; 
import java.io.*; 
 
public class UDPEchoClientTimeout { 
 
  private static final int TIMEOUT = 3000; // Resend timeout (milliseconds) 
  private static final int MAXTRIES = 5; // Maximum retransmissions 
 
  public static void main(String[] args) throws IOException { 
    InetAddress serverAddress = InetAddress.getByName("127.0.0.1"); // Server address 
    int servPort = 5500; // Server port 
    // Convert the argument String to bytes using the default encoding 
    byte[] bytesToSend = "Hi, World".getBytes(); 
 
    DatagramSocket socket = new DatagramSocket(); 
    socket.setSoTimeout(TIMEOUT); // Maximum receive blocking time(milliseconds) 
    // Sending packet 
    DatagramPacket sendPacket = new DatagramPacket(bytesToSend, bytesToSend.length, serverAddress, servPort); 
 
    DatagramPacket receivePacket = // Receiving packet 
    new DatagramPacket(new byte[bytesToSend.length], bytesToSend.length); 
 
    int tries = 0; // Packets may be lost, so we have to keep trying 
    boolean receivedResponse = false; 
    do { 
      socket.send(sendPacket); // Send the echo string 
      try { 
        socket.receive(receivePacket); // Attempt echo reply reception 
 
        if (!receivePacket.getAddress().equals(serverAddress)) {// Check 
                                    // source 
          throw new IOException("Received packet from an unknown source"); 
        } 
        receivedResponse = true; 
      } catch (InterruptedIOException e) { // We did not get anything 
        tries += 1; 
        System.out.println("Timed out, " + (MAXTRIES - tries) + " more tries..."); 
      } 
    } while ((!receivedResponse) && (tries < MAXTRIES)); 
 
    if (receivedResponse) { 
      System.out.println("Received: " + new String(receivePacket.getData())); 
    } else { 
      System.out.println("No response -- giving up."); 
    } 
    socket.close(); 
  }
} 

上述代码的UDP服务端是单线程,一次只能服务一个客户端。

以上就是本文的全部内容,查看更多Java的语法,大家可以关注:《Thinking in Java 中文手册》、《JDK 1.7 参考手册官方英文版》、《JDK 1.6 API java 中文参考手册》、《JDK 1.5 API java 中文参考手册》,也希望大家多多支持脚本之家。

相关文章

  • 详解Java图形化编程中的鼠标事件设计

    详解Java图形化编程中的鼠标事件设计

    这篇文章主要介绍了Java图形化编程中的鼠标事件设计,是Java的GUI开发中的基础部分,需要的朋友可以参考下
    2015-10-10
  • Java中LinkedHashSet的实现原理详解

    Java中LinkedHashSet的实现原理详解

    这篇文章主要介绍了Java中LinkedHasSet的实现原理详解,LinkedHashSet 是具有可预知迭代顺序的 Set 接口的哈希表和链接列表实现,此实现与HashSet 的不同之处在于,后者维护着一个运行于所有条目的双重链接列表,需要的朋友可以参考下
    2023-09-09
  • Spring boot集成swagger2生成接口文档的全过程

    Spring boot集成swagger2生成接口文档的全过程

    这篇文章主要给大家介绍了关于Spring boot集成swagger2生成接口文档的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Spring boot具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-09-09
  • Spring+EHcache缓存实例详解

    Spring+EHcache缓存实例详解

    这篇文章主要为大家详细介绍了Spring+EHcache缓存实例,EhCache是一个纯Java的进程内缓存框架,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-07-07
  • java以json格式向后台服务器接口发送请求的实例

    java以json格式向后台服务器接口发送请求的实例

    下面小编就为大家分享一篇java以json格式向后台服务器接口发送请求的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-01-01
  • SpringBoot实现图片识别文字的四种方式小结

    SpringBoot实现图片识别文字的四种方式小结

    本文主要介绍了SpringBoot实现图片识别文字的四种方式,包括Tess4J,百度智能云,阿里云,腾讯云这四种,具有一定的参考价值,感兴趣的可以了解一下
    2024-02-02
  • 详细解读Hibernate的缓存机制

    详细解读Hibernate的缓存机制

    这篇文章主要介绍了详细解读Hibernate的缓存机制,具有一定参考价值,这里分享给大家,供大家学习参阅。
    2017-10-10
  • IDEA的Project无法正常显示的问题解决

    IDEA的Project无法正常显示的问题解决

    本文主要介绍了IDEA的Project无法正常显示的问题解决,文中通过图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-02-02
  • Java泛型与数据库应用实例详解

    Java泛型与数据库应用实例详解

    这篇文章主要介绍了Java泛型与数据库应用,结合实例形式详细分析了java继承泛型类实现增删改查操作相关实现技巧,需要的朋友可以参考下
    2019-08-08
  • Spring Boot 员工管理系统超详细教程(源码分享)

    Spring Boot 员工管理系统超详细教程(源码分享)

    这篇文章主要介绍了Spring Boot 员工管理系统超详细教程(源码分享),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-05-05

最新评论