java Socket UDP实例详解

 更新时间:2017年02月03日 11:49:00   投稿:lqh  
这篇文章主要介绍了java Socket UDP实例详解的相关资料,需要的朋友可以参考下

UDP编程示例

服务器端:

package socket; 
 
import java.io.IOException; 
import java.net.DatagramPacket; 
import java.net.DatagramSocket; 
import java.net.SocketException; 
 
public class UDPServer { 
 
   
  public static void main(String[] args) throws IOException { 
    byte[] buf = new byte[1024]; 
    DatagramPacket dp = new DatagramPacket(buf, buf.length);//声明一个用来接收数据的“包裹” 
    DatagramSocket ds = new DatagramSocket(5678);//指定的是UDP中的端口号5678,在TCP中,还有另外一个端口号为5678的端口 
    while(true){ 
      ds.receive(dp); //阻塞式的 
      System.out.println(new String(buf,0,dp.getLength()));//dp中获取的数据的长度 
    } 
 
  } 
 
} 

客户端:

package socket; 
 
import java.io.IOException; 
import java.net.DatagramPacket; 
import java.net.DatagramSocket; 
import java.net.InetSocketAddress; 
import java.net.SocketException; 
 
public class UDPClient { 
 
  public static void main(String[] args) throws IOException { 
    byte[] buf = new String("Hello").getBytes(); 
    //UDP是无连接的,所以要在发送的数据包裹中指定要发送到的ip:port 
    DatagramPacket dp = new DatagramPacket(buf, buf.length, new InetSocketAddress("127.0.0.1", 5678)); 
    DatagramSocket ds = new DatagramSocket(9999); //指明发送端的端口号 
    ds.send(dp); 
    ds.close(); 
  } 
 
} 

说明:

1. 严格意义上来讲,UDP没有server和client之分,不像TCP中有ServerSocket和Socket,UDP中只有DatagramSocket。

2. UDP和TCP的端口是分开的,例如UDP有一个端口号为5678的端口,TCP也有一个端口号为5678的端口。

3. UDP是无连接的,所以要在发送的数据包裹中指定要发送到的ip:port。

4. 如果要发送long、int等类型的数据,则需要使用到ByteArrayOutputStream、DataOutputStream、ByteArrayInputStream、ByteArrayInputStream流类型,如下:

服务器端:

package socket; 
 
import java.io.ByteArrayInputStream; 
import java.io.ByteArrayOutputStream; 
import java.io.DataInputStream; 
import java.io.DataOutputStream; 
import java.io.IOException; 
import java.net.DatagramPacket; 
import java.net.DatagramSocket; 
import java.net.SocketException; 
 
public class UDPServer { 
 
   
  public static void main(String[] args) throws IOException { 
    byte[] buf = new byte[1024]; 
    DatagramPacket dp = new DatagramPacket(buf, buf.length); 
    DatagramSocket ds = new DatagramSocket(5678); 
    ByteArrayInputStream bais = null; 
    DataInputStream dos = null; 
    while(true){ 
      ds.receive(dp);  
      bais = new ByteArrayInputStream(buf); 
      dos = new DataInputStream(bais); 
      System.out.println(dos.readLong()); 
    } 
 
  } 
 
} 

客户端:

package socket; 
 
import java.io.ByteArrayOutputStream; 
import java.io.DataOutputStream; 
import java.io.IOException; 
import java.net.DatagramPacket; 
import java.net.DatagramSocket; 
import java.net.InetSocketAddress; 
import java.net.SocketException; 
 
public class UDPClient { 
 
  public static void main(String[] args) throws IOException { 
    byte[] buf = null; 
    long l = 100000L; 
    ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
    DataOutputStream dos = new DataOutputStream(baos); 
    dos.writeLong(l); 
    buf = baos.toByteArray(); 
    DatagramPacket dp = new DatagramPacket(buf, buf.length, new InetSocketAddress("127.0.0.1", 5678)); 
    DatagramSocket ds = new DatagramSocket(9999);  
    ds.send(dp); 
    ds.close(); 


        dos.close(); 
  } 
 
} 

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

相关文章

  • mybatis中返回主键一直为1的问题

    mybatis中返回主键一直为1的问题

    这篇文章主要介绍了mybatis中返回主键一直为1的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • 解决FeignClient重试机制造成的接口幂等性

    解决FeignClient重试机制造成的接口幂等性

    这篇文章主要介绍了解决FeignClient重试机制造成的接口幂等性问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • commons io文件操作示例分享

    commons io文件操作示例分享

    这篇文章主要介绍了commons io文件操作示例分享,需要的朋友可以参考下
    2014-02-02
  • MybatisPlus批量保存原理及失效原因排查全过程

    MybatisPlus批量保存原理及失效原因排查全过程

    这篇文章主要介绍了MybatisPlus批量保存原理及失效原因排查全过程,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-01-01
  • java读取excel表格的方法

    java读取excel表格的方法

    这篇文章主要为大家详细介绍了java读取excel表格的方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-12-12
  • SpringMVC域对象共享数据示例详解

    SpringMVC域对象共享数据示例详解

    这篇文章主要为大家介绍了SpringMVC域对象共享数据示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05
  • java基于Apache FTP实现文件上传、下载、修改文件名、删除

    java基于Apache FTP实现文件上传、下载、修改文件名、删除

    本篇文章主要介绍了Apache FTP实现文件上传、下载、修改文件名、删除,实现了FTP文件上传(断点续传)、FTP文件下载、FTP文件重命名、FTP文件删除等功能,有需要的可以了解一下。
    2016-11-11
  • springboot-curd基于mybatis项目搭建

    springboot-curd基于mybatis项目搭建

    这篇文章主要介绍了springboot-curd基于mybatis项目搭建,围绕相关资料展开详细内容,希望对正在学习的你有所帮助,需要的小伙伴也可以参考一下
    2022-01-01
  • mybatis打印SQL,并显示参数的实例

    mybatis打印SQL,并显示参数的实例

    这篇文章主要介绍了mybatis打印SQL,并显示参数的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • java微信公众号开发(搭建本地测试环境)

    java微信公众号开发(搭建本地测试环境)

    这篇文章主要介绍了java微信公众号开发,主要内容有测试公众号与本地测试环境搭建,需要的朋友可以参考下
    2015-12-12

最新评论