UDP实验课01

实验课上测试的源码。

1)服务器端

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

2)客户端

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值