UDP实验课01

本文提供了一个简单的UDP通信示例,包括服务器端与客户端的代码实现。通过这些代码,读者可以了解如何利用Java进行UDP数据包的发送与接收。

 实验课上测试的源码。

1)服务器端

Code:
  1. import java.io.*;   
  2. import java.net.*;   
  3.   
  4. //服务器端    
  5. public class UDPServerTest {   
  6.     static public void main(String args[]) {   
  7.         DatagramSocket receiveSocket = null;   
  8.         try {   
  9.             //DatagramSocket(int port):创建实例,并固定监听Port端口的报文。通常用于服务端   
  10.             receiveSocket = new DatagramSocket(55511);   
  11.             byte buf[] = new byte[1000];   
  12.             //DatagramPacket(byte[] buf, int length):将数据包中Length长的数据装进Buf数组,一般用来接收客户端发送的数据。   
  13.             DatagramPacket receivePacket = new DatagramPacket(buf, buf.length);   
  14.             System.out.println("开始接受数据:");   
  15.             boolean flag = true//作为接收完之后退出的标记   
  16.             while (flag) {   
  17.                 //接收数据报文到d中。receive方法产生一个“阻塞”。“阻塞”是一个专业名词,它会产生一个内部循环,   
  18.                 //使程序暂停在这个地方,直到一个条件触发。   
  19.                 receiveSocket.receive(receivePacket);   
  20.                 String name = receivePacket.getAddress().toString();   
  21.                 System.out.println("/n来自主机:" + name + "/n端口:"  
  22.                         + receivePacket.getPort());   
  23.                 //从实例中取得报文的Byte数组编码   
  24.                 String s = new String(receivePacket.getData(), 0, receivePacket   
  25.                         .getLength());   
  26.                 System.out.println("接受到的数据是: " + s);   
  27.                 flag = false;   
  28.                 //需关闭连接,也关闭端口。       
  29.                 receiveSocket.close();   
  30.             }   
  31.         } catch (SocketException e) {   
  32.             receiveSocket.close();   
  33.             e.printStackTrace();   
  34.             System.exit(-1);   
  35.         } catch (IOException e) {   
  36.             receiveSocket.close();   
  37.             System.out.println("网络通讯出现错误,问题在" + e.toString());   
  38.         }   
  39.     }   
  40. }   

 

2)客户端

Code:
  1. import java.io.*;   
  2. import java.net.*;   
  3.   
  4. //客户端   
  5. public class UDPClientTest {   
  6.     public static void main(String args[]) {   
  7.         DatagramSocket sendSocket = null;   
  8.         try {   
  9.             //DatagramSocket():通常用于客户端编程,它并没有特定监听的端口,仅仅使用一个临时的。程序会让操作系统分配一个可用的端口。   
  10.             // DatagramSocket(int port):创建实例,并固定监听Port端口的报文。通常用于服务端   
  11.             sendSocket = new DatagramSocket();   
  12.             String string = "who  a u  没死过,不知道dead的感觉";   
  13.             byte[] databyte = new byte[100];   
  14.             databyte = string.getBytes();   
  15.             //从Buf数组中,取出Length长的数据创建数据包对象,目标是clientAddress地址,clientPort端口,通常用来发送数据给客户端。  此处事发送给服务器端   
  16.             DatagramPacket sendPacket = new DatagramPacket(databyte,   
  17.                     databyte.length, InetAddress.getByName("222.17.97.152"),   
  18.                     55511);   
  19.             //发送报文sendPacket到目的地   
  20.             sendSocket.send(sendPacket);   
  21.             System.out.println("客户端开始传送数据!");   
  22.             sendSocket.close();   
  23.         } catch (SocketException e) {   
  24.             sendSocket.close();   
  25.             e.printStackTrace();   
  26.             System.out.println("不能打开数据报Socket,或数据报Socket无法与指定端口连接!");   
  27.         } catch (IOException ioe) {   
  28.             sendSocket.close();   
  29.             System.out.println(ioe.toString());   
  30.         }   
  31.     }   
  32. }   

   总结:异常或正常退出时,最好调用close方法,否则可能造成资源无法收回。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值