黑马程序员技术交流社区

标题: 控制台聊天小程序代码 [打印本页]

作者: 周博文    时间: 2015-8-17 14:08
标题: 控制台聊天小程序代码
发送端:
  1. import java.io.BufferedReader;
  2. import java.io.IOException;
  3. import java.io.InputStreamReader;
  4. import java.io.Reader;
  5. import java.net.DatagramPacket;
  6. import java.net.DatagramSocket;
  7. import java.net.InetAddress;

  8. /*
  9. * 发送端程序:用于发送信息
  10. */
  11. public class SendMessage implements Runnable {
  12.         /*
  13.          * 发送端成员变量: socket对象 目的地ip地址 通信端口号
  14.          */
  15.         private DatagramSocket socket;
  16.         private InetAddress ip;
  17.         private int port;

  18.         public SendMessage(DatagramSocket socket, InetAddress ip, int port) {
  19.                 super();
  20.                 this.socket = socket;
  21.                 this.ip = ip;
  22.                 this.port = port;
  23.         }

  24.         @Override
  25.         public void run() {
  26.                 // 缓冲输入流用于读取用户输入
  27.                 Reader in = new InputStreamReader(System.in);
  28.                 BufferedReader reader = new BufferedReader(in);
  29.                 while (true) {
  30.                         try {
  31.                                 // 读取用户输入,并打包数据
  32.                                 String line = reader.readLine();
  33.                                 int length = line.getBytes().length;
  34.                                 DatagramPacket dp = new DatagramPacket(line.getBytes(), length, ip, port);
  35.                                 // 发送数据报包
  36.                                 socket.send(dp);
  37.                                 // 如果输入886,结束循环
  38.                                 if("886".equals(line)){
  39.                                         break;
  40.                                 }
  41.                                
  42.                         } catch (IOException e) {
  43.                                 e.printStackTrace();
  44.                         }
  45.                 }
  46.                 // 关闭资源
  47.                 try {
  48.                         reader.close();
  49.                         socket.close();
  50.                 } catch (IOException e) {
  51.                         e.printStackTrace();
  52.                 }
  53.         }

  54. }
复制代码

接收端:
  1. import java.io.IOException;
  2. import java.net.DatagramPacket;
  3. import java.net.DatagramSocket;

  4. /*
  5. * 接收端程序:用于接收信息
  6. */
  7. public class ReceiveMessage implements Runnable {
  8.         /*
  9.          * 接收端成员变量: 接收端socket对象
  10.          */
  11.         private DatagramSocket socket;

  12.         public ReceiveMessage(DatagramSocket socket) {
  13.                 super();
  14.                 this.socket = socket;
  15.         }

  16.         @Override
  17.         public void run() {
  18.                 while (true) {
  19.                         // 接收数据并打印到控制台
  20.                         DatagramPacket dp = new DatagramPacket(new byte[1024], 0, 1024);
  21.                         try {
  22.                                 socket.receive(dp);
  23.                         } catch (IOException e) {
  24.                                 e.printStackTrace();
  25.                         }
  26.                         String data = new String(dp.getData(), 0, dp.getLength());
  27.                         System.out.println(dp.getAddress().getHostName() + "-" + dp.getPort() + " : " + data);
  28.                        
  29.                 }
  30.         }

  31. }
复制代码

客户端1:
  1. import java.io.IOException;
  2. import java.net.DatagramSocket;
  3. import java.net.InetAddress;

  4. public class Client1 {
  5.         public static void main(String[] args) throws IOException {
  6.                 SendMessage sm = new SendMessage(new DatagramSocket(), InetAddress.getByName("kaven-PC"), 10010);
  7.                 ReceiveMessage rm = new ReceiveMessage(new DatagramSocket(10011));
  8.                
  9.                 Thread t1 = new Thread(sm);
  10.                 Thread t2 = new Thread(rm);
  11.                
  12.                 t1.start();
  13.                 t2.start();
  14.         }
  15. }
复制代码

客户端2:

  1. import java.io.IOException;
  2. import java.net.DatagramSocket;
  3. import java.net.InetAddress;

  4. public class Client1 {
  5.         public static void main(String[] args) throws IOException {
  6.                 SendMessage sm = new SendMessage(new DatagramSocket(), InetAddress.getByName("kaven-PC"), 10010);
  7.                 ReceiveMessage rm = new ReceiveMessage(new DatagramSocket(10011));
  8.                
  9.                 Thread t1 = new Thread(sm);
  10.                 Thread t2 = new Thread(rm);
  11.                
  12.                 t1.start();
  13.                 t2.start();
  14.         }
  15. }
复制代码




作者: 周博文    时间: 2015-8-17 14:15
运行结果:

作者: ℃葫芦    时间: 2015-8-17 16:57
自己跟自己说话呢?
作者: pengbeilin    时间: 2015-8-17 17:43
这个年代 自娱自乐也需要技术
作者: boboyuwu    时间: 2015-8-17 18:27
不错不错要是我会建立个图形化界面有有趣很多呵呵
作者: 周博文    时间: 2015-8-17 20:12
℃葫芦 发表于 2015-8-17 16:57
自己跟自己说话呢?

。。。。。。。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2