黑马程序员 java基础---UDP协议实现聊天功能

来源:互联网 发布:数据安全管理的概念 编辑:程序博客网 时间:2024/05/19 20:40

---------------------- ASP.Net+Android+IOS开发、 .Net培训、期待与您交流! ----------------------


编写一个DOS界面的聊天程序;

有发送数据和接收数据两部分功能,这两个功能要同时执行,需要用到多线程技术;一个线程控制接收,一个线程控制发送。

1、发送线程的编写思路

      实现Runnable接口-----构造函数-----复写run方法-----从键盘读入数据-----将数据封装-----发送数据

class Send implements Runnable//实现runnable接口{public DatagramSocket ds;public Send(DatagramSocket ds){this.ds = ds;}public void run()//复写run方法{try{BufferedReader bfur = new BufferedReader(new InputStreamReader(System.in));//创建缓冲区String line = null;while((line=bfur.readLine())!=null){byte[] buf = line.getBytes();//封装数据时需要指明接收端的端口号DatagramPacket dp = new DatagramPacket(buf,buf.length,InetAddress.getByName("localhost"),10001);ds.send(dp);if(line.equals("886")){break;}}}catch (Exception e){throw new RuntimeException("发送失败!");}}}


2、接收线程的编写思路

    实现Runnable接口-----构造函数-----创建一个DatagrmaPacket对象接收数据-----提取接收包里面的信息-----打印

class Rece implements Runnable{public DatagramSocket ds;public Rece(DatagramSocket ds){this.ds = ds;}public void run(){try{while(true){byte[] buf = new byte[1024];//限定接收数据包的最大长度DatagramPacket dp = new DatagramPacket(buf,buf.length);ds.receive(dp);//将接收到的数据存入dpString ip = dp.getAddress().getHostAddress();//获取数据包中的地址信息//获取正文信息,注意不能写成String data = dp.getData(),//因为dp.getData()返回的是byte类数据String data = new String(dp.getData(),0,dp.getLength());System.out.println(ip + ":" + data);}}catch (Exception e){throw new RuntimeException("接受失败!");}}}


3、主函数

class ChatDemo {public static void main(String[] args) throws Exception{DatagramSocket sendSocket = new DatagramSocket();DatagramSocket receSocket = new DatagramSocket(10001);new Thread(new Send(sendSocket)).start();//创建一个发送线程new Thread(new Rece(receSocket)).start();//创建一个接收线程}}



---------------------- ASP.Net+Android+IOS开发、 .Net培训、期待与您交流! ----------------------

原创粉丝点击