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

所属分类: 软件编程 / java 阅读数: 73
收藏 0 赞 0 分享

一.服务端代码:

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实现一个简单的文件上传案例,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

详解在spring中使用JdbcTemplate操作数据库的几种方式

这篇文章主要介绍了详解在spring中使用JdbcTemplate操作数据库的几种方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

java中的switch case语句使用详解

这篇文章主要介绍了java中的switch case语句使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

深入理解Java 线程池

这篇文章主要介绍了Java 线程池的相关资料,文中讲解非常细致,帮助大家更好的理解和学习,感兴趣的朋友可以了解下
收藏 0 赞 0 分享

详解mybatis #{}和${}的区别、传参、基本语法

这篇文章主要介绍了mybatis #{}和${}的区别、传参、基本语法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

MyBatis 中 ${}和 #{}的正确使用方法(千万不要乱用)

这篇文章主要介绍了MyBatis 中 ${}和 #{}的正确使用方法,本文给大家提到了MyBatis 中 ${}和 #{}的区别,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

详解Mybatis中的 ${} 和 #{}区别与用法

这篇文章主要介绍了Mybatis中的 ${} 和 #{}区别与用法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

Maven安装过程图文详解

这篇文章主要介绍了Maven安装过程,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
收藏 0 赞 0 分享

SpringBoot登录拦截配置详解(实测可用)

这篇文章主要介绍了SpringBoot登录拦截配置详解(实测可用),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

JAVA 内存溢出案例汇总

这篇文章主要介绍了JAVA 内存溢出案例的汇总,文中讲解非常细致,帮助各位工作学习时避免内存溢出,感兴趣的朋友可以了解下
收藏 0 赞 0 分享
查看更多