知识大全 使用DatagramSocket发送、接收数据[2]

Posted 字节

篇首语:幼敏悟过人,读书辄成诵。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 使用DatagramSocket发送、接收数据[2]相关的知识,希望对你有一定的参考价值。

疯狂Java讲义:使用DatagramSocket发送、接收数据[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  程序客户端代码也与此类似 客户端采用循环不断地读取用户键盘输入 每当读到用户输入内容后就将该内容封装成DatagramPacket数据报 再将该数据报发送出去 接着把DatagramSocket中的数据读入接收用的DatagramPacket中(实际上是读入该DatagramPacket所封装的字节数组中) 客户端代码如下

  程序清单 codes/ / /UdpClient java

  public class UdpClient

  

  //定义发送数据报的目的地

  public static final int DEST_PORT = ;

  public static final String DEST_IP = ;

  //定义每个数据报的最大大小为 K

  private static final int DATA_LEN = ;

  //定义该客户端使用的DatagramSocket

  private DatagramSocket socket = null;

  //定义接收网络数据的字节数组

  byte[] inBuff = new byte[DATA_LEN];

  //以指定字节数组创建准备接受数据的DatagramPacket对象

  private DatagramPacket inPacket =

  new DatagramPacket(inBuff inBuff length)

  //定义一个用于发送的DatagramPacket对象

  private DatagramPacket outPacket = null;

  public void init()throws IOException

  

  try

  

  //创建一个客户端DatagramSocket 使用随机端口

  socket = new DatagramSocket()

  //初始化发送用的DatagramSocket 它包含一个长度为 的字节数组

  outPacket = new DatagramPacket(new byte[ ]

  InetAddress getByName(DEST_IP) DEST_PORT)

  //创建键盘输入流

  Scanner scan = new Scanner(System in)

  //不断读取键盘输入

  while(scan hasNextLine())

  

  //将键盘输入的一行字符串转换字节数组

  byte[] buff = scan nextLine() getBytes()

  //设置发送用的DatagramPacket里的字节数据

  outPacket setData(buff)

  //发送数据报

  socket send(outPacket)

  //读取Socket中的数据 读到的数据放在inPacket所封装的字节数组里

  socket receive(inPacket)

  System out println(new String(inBuff

  inPacket getLength()))

  

  

  //使用finally块保证关闭资源

  finally

  

  if (socket != null)

  

  socket close()

  

  

  

  public static void main(String[] args)

  throws IOException

  

  new UdpClient() init()

  

  

  上面程序的粗体字代码同样也是通过DatagramSocket发送 接收DatagramPacket的关键代码 这些代码与服务器的代码基本相似 而客户端与服务器端的唯一区别在于 服务器所在IP地址 端口是固定的 所以客户端可以直接将该数据报发送给服务器 而服务器则需要根据接收到的数据报来决定将 反馈 数据报的目的地

  读者可能会发现 使用DatagramSocket进行网络通信时 服务器端无须 也无法保存每个客户端的状态 客户端把数据报发送到服务器后 完全有可能立即退出 但不管客户端是否退出 服务器无法知道客户端的状态

  当使用UDP协议时 如果想让一个客户端发送的聊天信息可被转发到其他所有客户端则比较困难 可以考虑在服务器使用Set来保存所有客户端信息 每当接收到一个客户端的数据报之后 程序检查该数据报的源SocketAddress是否在Set集合中 如果不在就将该SocketAddress添加到该Set集合中 但这样一来又涉及一个问题 可能有些客户端发送一个数据报之后永久性地退出了程序 但服务器端还将该客户端的SocketAddress保存在Set集合中……总之 这种方式需要处理的问题比较多 编程比较烦琐 幸好Java为UDP协议提供了MulticastSocket类 通过该类可以轻松实现多点广播

       返回目录 疯狂Java讲义

       编辑推荐

       Java程序性能优化 让你的Java程序更快 更稳定

       新手学Java 编程

       Java程序设计培训视频教程

cha138/Article/program/Java/hx/201311/27260

相关参考

知识大全 在服务端接收和发送数据

Java网络编程从入门到精通(26):在服务端接收和发送数据  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看

知识大全 使用Socket类接收和发送数据

Java网络编程从入门到精通(13):使用Socket类接收和发送数据  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶

知识大全 使用Socket发送和接收消息[2]

使用Socket发送和接收消息[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &n

涉及小额汇划交易有哪些登记簿查询?

汇出登记簿、汇入登记簿、发送数据包登记簿、发送数据包明细登记簿、接收数据包登记簿、接收数据包明细登记簿、小额通用信息(含自由格式信息)登记簿、小额查询查复登记簿、小额退回处理登记簿、小额撤销处理登记簿

知识大全 使用Socket发送和接收消息[3]

使用Socket发送和接收消息[3]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &n

知识大全 使用Socket发送和接收消息[1]

使用Socket发送和接收消息[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &n

知识大全 使用Socket发送和接收消息[4]

使用Socket发送和接收消息[4]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &n

知识大全 vs.net打造发送与接收端程序

  本篇文章的主要开发环境是VisualStudioVisualStudio系列产品一直以来都提供了强大的控件功能然而我们利用这些控件可以编写出功能强大的应用程序本文主要利用微软的最新net开发工具为

知识大全 网络数据流的java处理

  郭洪锋()该文章对编写客户服务器应用的java程序员有所帮助可以解决程序在对方出现故障的时候继续稳定运行  前言java程序要处理很多的网络数据网络数据发送和接收以及数据流的处理是java程序要特

解码器是什么?

  解码器的作用是专用数据电缆接收来自控制主机发送的控制码,经其解码,放大输出,驱动云台的旋转,以及变焦镜头的变焦与聚焦。  通常,解码器的电压放大输出,对云台的驱动电压为AC24V,对通镜的驱动电压