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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 尹兆国 中级黑马   /  2014-6-14 21:00  /  833 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. package com.itheima.day23;

  2. /*
  3. 编写一个聊天程序。
  4. 有收数据的部分,和发数据的部分。
  5. 这两部分需要同时执行。
  6. 那就需要用到多线程技术。
  7. 一个线程控制收,一个线程控制发。

  8. 因为收和发动作是不一致的,所以要定义两个run方法。
  9. 而且这两个方法要封装到不同的类中。

  10. */
  11. import java.io.*;
  12. import java.net.*;
  13. class Send implements Runnable
  14. {
  15.         private DatagramSocket ds;
  16.         public Send(DatagramSocket ds)
  17.         {
  18.                 this.ds = ds;
  19.         }


  20.         public void run()
  21.         {
  22.                 try
  23.                 {
  24.                         BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));

  25.                         String line = null;

  26.                         while((line=bufr.readLine())!=null)
  27.                         {
  28.                                

  29.                                 byte[] buf = line.getBytes();

  30.                                 DatagramPacket dp =
  31.                                         new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.1.14"),10002);

  32.                                 ds.send(dp);

  33.                                 if("886".equals(line))
  34.                                         break;
  35.                         }
  36.                 }
  37.                 catch (Exception e)
  38.                 {
  39.                         throw new RuntimeException("发送端失败");
  40.                 }
  41.         }
  42. }

  43. class Rece implements Runnable
  44. {

  45.         private DatagramSocket ds;
  46.         public Rece(DatagramSocket ds)
  47.         {
  48.                 this.ds = ds;
  49.         }
  50.         public void run()
  51.         {
  52.                 try
  53.                 {
  54.                         while(true)
  55.                         {
  56.                                 byte[] buf = new byte[1024];
  57.                                 DatagramPacket dp = new DatagramPacket(buf,buf.length);

  58.                                 ds.receive(dp);


  59.                                 String ip = dp.getAddress().getHostAddress();

  60.                                 String data = new String(dp.getData(),0,dp.getLength());

  61.                                 if("886".equals(data))
  62.                                 {
  63.                                         System.out.println(ip+"....离开聊天室");
  64.                                         break;
  65.                                 }


  66.                                 System.out.println(ip+":"+data);
  67.                         }
  68.                 }
  69.                 catch (Exception e)
  70.                 {
  71.                         throw new RuntimeException("接收端失败");
  72.                 }
  73.         }
  74. }


  75. class  ChatDemo
  76. {
  77.         public static void main(String[] args) throws Exception
  78.         {
  79.                 DatagramSocket sendSocket = new DatagramSocket();
  80.                 DatagramSocket receSocket = new DatagramSocket(10002);

  81.                 new Thread(new Send(sendSocket)).start();
  82.                 new Thread(new Rece(receSocket)).start();

  83.         }
  84. }
复制代码
虚拟机ip:192.168.1.14
  物理机器ip:192.168.1.100
  我想让虚拟机和物理机器之前可以聊天,怎么实现啊
   我设置虚拟机网卡为host only模式,手动配置,和物理机同网段,但ping不通网关

2.jpg (66.39 KB, 下载次数: 0)

2.jpg

2 个回复

倒序浏览
      虚拟机和主机在同一网段,无需ping通网关就可以进行通信,只要彼此的IP地址可以ping就可以了,如果能ping通就可以先排除网络问题
回复 使用道具 举报
虚拟机网络设置有问题,具体的参考http://os.51cto.com/art/200912/168800.htm
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马