A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 陈洋 中级黑马   /  2013-9-24 00:18  /  753 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 陈洋 于 2013-9-24 10:09 编辑
  1. package cn.itcast.UDP;

  2. import java.io.BufferedReader;
  3. import java.io.IOException;
  4. import java.io.InputStreamReader;
  5. import java.net.DatagramPacket;
  6. import java.net.DatagramSocket;
  7. import java.net.InetAddress;

  8. class S implements Runnable{

  9.         @Override
  10.         public void run() {
  11.                 try {
  12.                         
  13.                         DatagramSocket ds = new DatagramSocket(88);
  14.                         BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  15.                         
  16.                         String str=null;
  17.                         while((str=br.readLine())!=null){
  18.                                 byte[] buf = str.getBytes();
  19.                                 DatagramPacket dp = new DatagramPacket(
  20.                                                                                 buf,buf.length,InetAddress.getByName("192.168.1.101"),10005);
  21.                                 ds.send(dp);
  22.                         }
  23.                         
  24.                         ds.close();        
  25.                 } catch (Exception e) {
  26.                         // TODO Auto-generated catch block
  27.                         e.printStackTrace();
  28.                 }
  29.                         
  30.                
  31.         }

  32. }


  33. class R implements Runnable{

  34.         @Override
  35.         public void run() {
  36.                 try{
  37.                         
  38.                         DatagramSocket ds = new DatagramSocket(10005);
  39.                         while(true){
  40.                                 byte[] by = new byte[10];
  41.                                 DatagramPacket dp = new DatagramPacket(by, by.length);
  42.                                 ds.receive(dp);
  43.                                 
  44.                                 System.out.println(new String(dp.getData(),0,by.length));
  45.                         }
  46.                         ds.close();//这里怎么关闭不了,报错。
  47.                 }catch(Exception e){}

  48.         }
  49. }

  50. public class UDP2{

  51.         public static void main(String[] args) {

  52.                 new Thread(new S()).start();
  53.                 new Thread(new R()).start();
  54.                
  55.         }
  56. }
复制代码
问题在注释处

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

3 个回复

正序浏览
有while循环,那里根本关闭不了,所以后面的close()语句是到达不了的,改动了一下
  1. package cn.itcast.UDP;


  2. import java.io.BufferedReader;
  3. import java.io.IOException;
  4. import java.io.InputStreamReader;
  5. import java.net.DatagramPacket;
  6. import java.net.DatagramSocket;
  7. import java.net.InetAddress;

  8. class S implements Runnable{
  9.         private DatagramSocket ds;
  10.         public S(DatagramSocket ds){//弄一个构造方法,传入DataGramSocket
  11.                 this.ds = ds;
  12.         }
  13.        

  14.         @Override
  15.         public void run() {
  16.                 try {
  17.                         
  18.                         BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  19.                         
  20.                         String str=null;
  21.                         while((str=br.readLine())!=null){
  22.                                 byte[] buf = str.getBytes();
  23.                                 DatagramPacket dp = new DatagramPacket(
  24.                                                                                 buf,buf.length,InetAddress.getByName("localhost"),10005);
  25.                                 ds.send(dp);
  26.                         }
  27.                         
  28.                         ds.close();        
  29.                 } catch (Exception e) {
  30.                         // TODO Auto-generated catch block
  31.                         e.printStackTrace();
  32.                 }
  33.                         
  34.                
  35.         }

  36. }


  37. class R implements Runnable{
  38.         private DatagramSocket ds;

  39.         public R( DatagramSocket ds){//弄一个构造方法,传入DataGramSocket
  40.                 this.ds = ds;
  41.         }

  42.         @Override
  43.         public void run() {
  44.                 try{
  45.                         
  46.                         while(true){
  47.                                 byte[] by = new byte[10];
  48.                                 DatagramPacket dp = new DatagramPacket(by, by.length);
  49.                                 ds.receive(dp);
  50.                                 
  51.                                 System.out.println(new String(dp.getData(),0,by.length));
  52.                         }
  53. //                        ds.close();//这里怎么关闭不了,报错。有while循环,这里就读不到:Unreachable code,
  54.                                                 //去掉while之后,我觉等应该是关闭了,因为只有发送端在发数据,而没有接收端接收数据了
  55.                 }catch(Exception e){}

  56.         }
  57. }

  58. public class UDP2{

  59.         public static void main(String[] args)throws Exception {

  60.                 new Thread(new S(new DatagramSocket())).start();
  61.                 new Thread(new R(new DatagramSocket(10005))).start();//接收端要知道端口
  62.                
  63.         }
  64. }
复制代码
回复 使用道具 举报
李锡碧 发表于 2013-9-24 00:32
while(true){}......后面的执行不到了,,,

不是这个问题,去掉循环也报错。
回复 使用道具 举报
while(true){}......后面的执行不到了,,,
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马