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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 徐帅 中级黑马   /  2012-7-3 14:03  /  3308 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

为啥从键盘录入数据后,没有反应,请大侠帮忙看看,郁闷半天了

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

class  Send implements Runnable  
{
        private DatagramSocket ds;
        public Send(DatagramSocket ds)
        {
                this.ds = ds;
        }
        public void run()
        {
                try
                {
                        while(true)
                   {

                        BufferedReader bufr =
                                new BufferedReader(new InputStreamReader(System.in));

                        String line = null;

                        while ((line = bufr.readLine())!= null)
                          {
                                byte[] buf = new byte[1024];

                                DatagramPacket dp = new
                                        DatagramPacket(buf,buf.length,InetAddress.getByName("172.0.0.1"),10003);

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



class Rece implements Runnable
{
        private DatagramSocket ds;
        public  Rece(DatagramSocket ds)
        {
                this.ds = ds;
        }
        public void run()
        {
                try
                {
                        while (true)
                  {
                                byte [] buf = new byte[1024];
                               
                                DatagramPacket dp = new DatagramPacket(buf,buf.length);

                                ds.receive(dp);
                               
                                String ip = dp.getAddress().getHostName();
                                String data = new String(dp.getData(),0,dp.getLength());
                               
                                System.out.println(ip+"::"+data);
                   }
                }
                catch (Exception e)
                {
                        throw new RuntimeException("接收失败");
                }
               
        }

}

class ChatDemo
{
        public static void main(String[] args)throws Exception
   {

        DatagramSocket sendSocket = new DatagramSocket();
        DatagramSocket receSocket = new DatagramSocket();

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

   }
}

11 个回复

倒序浏览

回帖奖励 +3

现在还不懂这个,给你顶一下
回复 使用道具 举报

回帖奖励 +3

你的IP地址写错了, 代表本机的IP是:127.0.0.1    建议你先把IP改后,再试下。
回复 使用道具 举报
唐辉辉 发表于 2012-7-3 22:27
你的IP地址写错了, 代表本机的IP是:127.0.0.1    建议你先把IP改后,再试下。 ...

已修改正确,谢谢 啊
回复 使用道具 举报

回帖奖励 +3

怎么没看到你接收数据的套接字绑定到了哪个端口呢?是不是私下里写的时候绑定了?否则的话是没法给这个接收数据的套接字发送数据的
回复 使用道具 举报
haiyualong 发表于 2012-7-5 09:18
怎么没看到你接收数据的套接字绑定到了哪个端口呢?是不是私下里写的时候绑定了?否则的话是没法给这个接收 ...

你说的对。程序运行没什么结果,忘记传入端口了。谢谢指正。
回复 使用道具 举报
IP地址和接口都修改完毕,程序可以正常运行,不过在聊天的时候,总是只能够获取到
IP地址,::后面没有Data,而且每次输入完数据回车之后,中间会刷很多空白行,这是为什么呢?
回复 使用道具 举报
王海宇 黑马帝 2012-7-12 08:36:26
8#
蓝色的枫叶 发表于 2012-7-5 20:51
IP地址和接口都修改完毕,程序可以正常运行,不过在聊天的时候,总是只能够获取到
IP地址,::后面没有Dat ...

因为你发送的数据只是1024个空白字节,你从键盘输入的数据并没有被用作要发送的数据。你在发送数据的while循环里面得到的来自键盘的数据 line 并没有使用。。你把 byte[] buf = new byte[1024] 改成 byte[] buf = line.getBytes()  这样把 line 变成要发送的字节数组,应该就可以了
回复 使用道具 举报
徐帅 中级黑马 2012-7-12 10:00:40
9#
haiyualong 发表于 2012-7-12 08:36
因为你发送的数据只是1024个空白字节,你从键盘输入的数据并没有被用作要发送的数据。你在发送数据的whil ...

总算是对了、这帖子沉好长时间了。非常感谢。
回复 使用道具 举报
蓝色的枫叶 发表于 2012-7-12 10:00
总算是对了、这帖子沉好长时间了。非常感谢。

客气了 这些天一直在准备期末考试,没上论坛。我这也期待着能去黑马学习呢
回复 使用道具 举报
haiyualong 发表于 2012-7-12 10:36
客气了 这些天一直在准备期末考试,没上论坛。我这也期待着能去黑马学习呢 ...

呵呵。我也是,有段时间没学习java了。不过我开学大四,你 毕业了?
回复 使用道具 举报
蓝色的枫叶 发表于 2012-7-12 10:51
呵呵。我也是,有段时间没学习java了。不过我开学大四,你 毕业了?

跟你一样  暑假后就进入大四了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马