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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

毕老师视频中的UDP聊天小程序是将对方的IP地址写死的,我想可不可以在dos命令行下第一行输入对方IP地址,选择聊天对象后开始聊天呢?做了些小改动实现了一个小小的需求。代码经过实践检验,局域网条件下可以在DOS窗口运行该程序实现通过第一行输入对方IP地址进行选择聊天对象聊天。
  1. package p2;

  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. import java.net.SocketException;

  9. public class UDP_ChatDemo {
  10.        
  11.         public static void main(String[] args) throws SocketException {
  12.                 DatagramSocket send = new DatagramSocket(7778);
  13.                 DatagramSocket rece = new DatagramSocket(10004);
  14.                
  15.                 new Thread(new Send_1(send)).start();
  16.                 new Thread(new Rece_1(rece)).start();

  17.         }
  18. }
  19. //创建发送任务
  20. class Send_1 implements Runnable{
  21.         //持有UDP套接字
  22.         private DatagramSocket socket;
  23.         /**
  24.          * @param socket
  25.          */
  26.         public Send_1(DatagramSocket socket) {
  27.                 super();
  28.                 this.socket = socket;
  29.         }
  30.         @Override
  31.         public void run() {
  32.                 try {
  33.                         //创建键盘读取流
  34.                         BufferedReader bfr = new BufferedReader(new InputStreamReader(System.in));
  35.                         //第一行读取输入的对方ip地址
  36.                         String ip = bfr.readLine();
  37.                         //读取聊天数据
  38.                         String line = null;
  39.                         while ((line=bfr.readLine())!=null) {
  40.                                 if("over".equals(line))
  41.                                         break;
  42.                                 byte[] buf = line.getBytes();
  43.                                 //创建数据包对象
  44.                                 DatagramPacket packet = new DatagramPacket(buf, 0, buf.length,InetAddress.getByName(ip), 10004);
  45.                                 //发送数据
  46.                                 socket.send(packet);
  47.                         }
  48.                         bfr.close();
  49.                 } catch (IOException e) {
  50.                 }
  51.                
  52.         }
  53.        
  54. }
  55. //创建接收任务
  56. class Rece_1 implements Runnable{
  57.         //持有UDP套接字
  58.         private DatagramSocket socket;
  59.         /**
  60.          * @param socket
  61.          */
  62.         public Rece_1(DatagramSocket socket) {
  63.                 super();
  64.                 this.socket = socket;
  65.         }
  66.         @Override
  67.         public void run() {
  68.                 try {
  69.                         //创建缓冲数组
  70.                         byte[] buf = new byte[1024];
  71.                         //创建数据包对象
  72.                         DatagramPacket packet = new DatagramPacket(buf, buf.length);
  73.                         while (true) {
  74.                                 //接收数据包
  75.                                 socket.receive(packet);
  76.                                 //获取数据
  77.                                 byte[] data = packet.getData();
  78.                                 //控制台输出
  79.                                 String text = new String(data,0,packet.getLength());
  80.                                 String ip = packet.getAddress().getHostAddress();
  81.                                 System.out.println(ip+"::"+text);
  82.                         }
  83.                 } catch (IOException e) {
  84.                 }finally{
  85.                         socket.close();
  86.                 }
  87.                
  88.         }
  89.        
  90. }
复制代码


2 个回复

倒序浏览
我就路过看看
回复 使用道具 举报

いらっしゃい
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马