黑马程序员技术交流社区

标题: 今天学了向老师网络编程这一章,自己设计了UDP聊天软件 [打印本页]

作者: 嘿嘿小学徒    时间: 2012-12-31 08:13
标题: 今天学了向老师网络编程这一章,自己设计了UDP聊天软件
  1. package heima.net;

  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 UDPChatDemo {

  10.     /**
  11.      * @param 黑马程序员
  12.      *            -UDP聊天
  13.      * @author 高一航
  14.      */
  15.     public static void main(String[] args) {
  16.         try {
  17.             DatagramSocket sendSocket = new DatagramSocket();
  18.             DatagramSocket recieveSocket = new DatagramSocket(10001);//监听本机的10001端口
  19.             new Thread(new Sender(sendSocket)).start();
  20.             new Thread(new Receiver(recieveSocket)).start();
  21.         } catch (SocketException e) {
  22.             e.printStackTrace();
  23.         }

  24.     }

  25. }

  26. class Sender implements Runnable {
  27.     private DatagramSocket ds;// 1,建立Socket端点
  28.     private DatagramPacket dp;// 2,定义数据包,用于存储数据;

  29.     public Sender(DatagramSocket ds) {
  30.         this.ds = ds;
  31.     }

  32.     @Override
  33.     public void run() {
  34.         BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
  35.         byte[] buf = new byte[1024];
  36.         String line;
  37.         try {
  38.             while ((line = in.readLine()) != null) {
  39.                 buf = line.getBytes();
  40.                 dp = new DatagramPacket(buf, buf.length,
  41.                         InetAddress.getByName("127.0.0.1"), 10000);
  42.                 ds.send(dp);// 3,通过socket发送方法,将数据发送
  43.                 if ("bye".equalsIgnoreCase(line)) {
  44.                     break;
  45.                 }
  46.             }
  47.         } catch (IOException e) {
  48.             e.printStackTrace();
  49.         } finally {
  50.             try {
  51.                 in.close();
  52.             } catch (IOException e) {
  53.                 e.printStackTrace();
  54.             }
  55.             ds.close();
  56.             System.out.println("sender resources closed");
  57.         }
  58.     }

  59. }

  60. class Receiver implements Runnable {
  61.     private DatagramSocket ds;// 1,建立Socket端点
  62.     public DatagramPacket dp;// 2,定义数据包,用于存储数据;

  63.     public Receiver(DatagramSocket ds) {
  64.         this.ds = ds;
  65.     }

  66.     @Override
  67.     public void run() {
  68.         byte[] buf = new byte[1024];
  69.         String ip;
  70.         String context;
  71.         try {
  72.             while (true) {
  73.                 dp = new DatagramPacket(buf, buf.length);
  74.                 ds.receive(dp);//3,通过socket的receive方法将数据存入数据包
  75.                 ip = dp.getAddress().getHostAddress();//获取IP
  76.                 context = new String(dp.getData(), 0, dp.getLength());//获取内容
  77.                 System.out.println(ip + " : " + context);
  78.             }
  79.         } catch (IOException e) {
  80.             e.printStackTrace();
  81.         } finally {
  82.             ds.close();
  83.             System.out.println("Receiver resources closed");
  84.         }
  85.     }

  86. }
复制代码





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