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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© just_nnnnx 中级黑马   /  2013-12-30 21:16  /  1507 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 just_nnnnx 于 2013-12-31 12:25 编辑
  1. import java.io.*;
  2. import java.net.*;

  3. class Send implements Runnable
  4. {
  5.         private DatagramSocket ds;
  6.         Send(DatagramSocket ds)
  7.         {
  8.                 this.ds = ds;
  9.         }

  10.         public void run()
  11.         {
  12.                 try
  13.                 {
  14.                         BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));

  15.                         String line = null;
  16.                         while((line = bufr.readLine())!=null)
  17.                         {
  18.                                 if("88".equals(line))
  19.                                         break;
  20.                                 byte[] by = line.getBytes();
  21.                                 DatagramPacket dp =
  22.                                         new DatagramPacket(by,by.length,InetAddress.getByName("LocalHost"),8888);

  23.                                 ds.send(dp);
  24.                         }
  25.                 }
  26.                 catch (Exception e)
  27.                 {
  28.                         throw new RuntimeException("发送失败");
  29.                 }
  30.         }
  31. }

  32. class Receive implements Runnable
  33. {
  34.         private DatagramSocket ds;

  35.         Receive(DatagramSocket ds)
  36.         {
  37.                 this.ds = ds;
  38.         }

  39.         public void run()
  40.         {
  41.                 try
  42.                 {
  43.                         while(true)
  44.                         {
  45.                                 byte[] by = new byte[1024];
  46.                                 
  47.                                 DatagramPacket dp = new DatagramPacket(by,by.length);

  48.                                 ds.receive(dp);

  49.                                 String ip = dp.getAddress().getHostAddress();
  50.                                 String data = new String(dp.getData(),0,dp.getLength());

  51.                                 if("886".equals(data))
  52.                                         break;

  53.                                 System.out.println(ip+":"+data);
  54.                         }
  55.                 }
  56.                 catch (Exception e)
  57.                 {
  58.                         throw new RuntimeException("接收失败");
  59.                 }
  60.         }
  61. }


  62. class  MyChat
  63. {
  64.         public static void main(String[] args) throws Exception
  65.         {
  66.                 DatagramSocket dg = new DatagramSocket(8888);

  67.                 new Thread(new Send(dg)).start();
  68.                 new Thread(new Receive(dg)).start();
  69.         }
  70. }

  71. class  MyChat_2
  72. {
  73.         public static void main(String[] args) throws Exception
  74.         {
  75.                 DatagramSocket dg = new DatagramSocket(8886);

  76.                 new Thread(new Send(dg)).start();
  77.                 new Thread(new Receive(dg)).start();
  78.         }
  79. }
复制代码
现在的情况是,1号窗口可以写,也可以读到2窗口的内容,但2号窗口只能输出,而看不到1号窗口发送的内容,怎么才能实现两个窗口同时可以读写呢?

图片1.png (20.47 KB, 下载次数: 7)

图片1.png

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

2 个回复

倒序浏览
帮你改好了,其实这是因为你把所有数据都朝着8888这个端口给发了过去,而负责监听此端口的只有MyChat这一个。所以在初始化的时候,要把端口传。


import java.io.*;
import java.net.*;

class Send implements Runnable
{
        private DatagramSocket ds;
        private int num;
        Send(DatagramSocket ds,int num)
        {
                this.ds = ds;
                this.num=num;
        }

        public void run()
        {
                try
                {
                        BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));

                        String line = null;
                        while((line = bufr.readLine())!=null)
                        {
                                if("88".equals(line))
                                        break;
                                byte[] by = line.getBytes();
                                DatagramPacket dp = new DatagramPacket(by,by.length,InetAddress.getByName("LocalHost"),num);


                                ds.send(dp);
                        }
                }
                catch (Exception e)
                {
                        throw new RuntimeException("发送失败");
                }
        }
}

class Receive implements Runnable
{
        private DatagramSocket ds;

        Receive(DatagramSocket ds)
        {
                this.ds = ds;
        }

        public void run()
        {
                try
                {
                        while(true)
                        {
                                byte[] by = new byte[1024];

                                DatagramPacket dp = new DatagramPacket(by,by.length);

                                ds.receive(dp);

                                String ip = dp.getAddress().getHostAddress();
                                String data = new String(dp.getData(),0,dp.getLength());

                                if("886".equals(data))
                                        break;

                                System.out.println(ip+":"+data);
                        }
                }
                catch (Exception e)
                {
                        throw new RuntimeException("接收失败");
                }
        }
}


class  MyChat
{
        public static void main(String[] args) throws Exception
        {
                DatagramSocket dg = new DatagramSocket(8888);

                new Thread(new Send(dg,8886)).start();
                new Thread(new Receive(dg)).start();
        }
}

class  MyChat_2
{
        public static void main(String[] args) throws Exception
        {
                DatagramSocket dg = new DatagramSocket(8886);
                new Thread(new Send(dg,8888)).start();
                new Thread(new Receive(dg)).start();
        }
}


评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
刘汉文 发表于 2013-12-31 10:11
帮你改好了,其实这是因为你把所有数据都朝着8888这个端口给发了过去,而负责监听此端口的只有MyChat这一个 ...

恩,我也是这样改的,嘿嘿,谢谢了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马