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

© 以梦为码 中级黑马   /  2015-7-17 18:59  /  417 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

                 /*
         * 实现UDP的聊天程序
         * 保证单一窗口的接收和发送
         * 多线程技术实现,
         * 主线程main,启动程序,开启两个线程,一个线程
         * 运行接收端,一个线程运行发送端
         * 运行的代码,封装到run方法中即可,DatagramSocket不能放在run
         * DatagramSocket对象,在main创建完毕,传递给线程执行
         */
import java.net.*;
import java.io.*;

public class WangLuoBianCheng {
public static void main(String[] args) throws Exception{
        Send se=new Send(new DatagramSocket());
        Server sr=new Server(new DatagramSocket(8000));
        Thread t1=new Thread(se);
        Thread t2=new Thread(sr);
        t1.start();
        t2.start();       
}
}
//定义类,实现Runnable接口,UDP的发送端
class Send implements Runnable{
         private DatagramSocket ds;
        Send(DatagramSocket ds){
                this.ds=ds;
        }
        public void run(){
                try{
                        // IO流读取键盘输入
                BufferedReader bu=new BufferedReader(new InputStreamReader(System.in));
         String line=null;
         while((line=bu.readLine())!=null){
                if(line.equals("886")){
                        break;   
                 }
                byte[] bytes=line.getBytes();
                // 创建数据包对象,封装字节数组,长度,IP对象,端口号
                DatagramPacket dp=new DatagramPacket(bytes,bytes.length,InetAddress.getByName("192.168.33.22"),8000);
                // 调用send方法
                ds.send(dp);
         }
      // 关闭资源
                ds.close();
                }catch(Exception e){
                e.printStackTrace();
          }
        }
  }
//定义类,实现Runnable接口,实现UDP接收端
class Server implements Runnable{
        private DatagramSocket ds;
        Server(DatagramSocket ds){
                this.ds=ds;
        }
        public void run(){
                try{
                        // 字节数组
                        byte[] bytes=new byte[1024];
                        while(true){
                                // 创建数据包对象
          DatagramPacket dp=new DatagramPacket(bytes,bytes.length);
       // 调用接收端的receive方法
          ds.receive(dp);
          System.out.println(new String(bytes,0,dp.getLength()));
                        }
                }catch(Exception e){
                e.printStackTrace();
          }
        }
}

4 个回复

倒序浏览
不明觉厉
回复 使用道具 举报
还没有学习到这里,先留着以后看
回复 使用道具 举报
pch 发表于 2015-7-17 20:45
还没有学习到这里,先留着以后看

加油,一起努力
回复 使用道具 举报
坚持到无能为力,努力到感动自己!!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马