黑马程序员技术交流社区

标题: 为啥UDP聊天时没有反应的问题 [打印本页]

作者: 徐帅    时间: 2012-7-3 14:03
标题: 为啥UDP聊天时没有反应的问题
为啥从键盘录入数据后,没有反应,请大侠帮忙看看,郁闷半天了

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();

   }
}

作者: 孙飞    时间: 2012-7-3 20:42
现在还不懂这个,给你顶一下
作者: 唐辉辉    时间: 2012-7-3 22:27
你的IP地址写错了, 代表本机的IP是:127.0.0.1    建议你先把IP改后,再试下。
作者: 徐帅    时间: 2012-7-4 08:53
唐辉辉 发表于 2012-7-3 22:27
你的IP地址写错了, 代表本机的IP是:127.0.0.1    建议你先把IP改后,再试下。 ...

已修改正确,谢谢 啊
作者: 王海宇    时间: 2012-7-5 09:18
怎么没看到你接收数据的套接字绑定到了哪个端口呢?是不是私下里写的时候绑定了?否则的话是没法给这个接收数据的套接字发送数据的
作者: 徐帅    时间: 2012-7-5 19:05
haiyualong 发表于 2012-7-5 09:18
怎么没看到你接收数据的套接字绑定到了哪个端口呢?是不是私下里写的时候绑定了?否则的话是没法给这个接收 ...

你说的对。程序运行没什么结果,忘记传入端口了。谢谢指正。
作者: 徐帅    时间: 2012-7-5 20:51
IP地址和接口都修改完毕,程序可以正常运行,不过在聊天的时候,总是只能够获取到
IP地址,::后面没有Data,而且每次输入完数据回车之后,中间会刷很多空白行,这是为什么呢?

作者: 王海宇    时间: 2012-7-12 08:36
蓝色的枫叶 发表于 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
haiyualong 发表于 2012-7-12 08:36
因为你发送的数据只是1024个空白字节,你从键盘输入的数据并没有被用作要发送的数据。你在发送数据的whil ...

总算是对了、这帖子沉好长时间了。非常感谢。
作者: 王海宇    时间: 2012-7-12 10:36
蓝色的枫叶 发表于 2012-7-12 10:00
总算是对了、这帖子沉好长时间了。非常感谢。

客气了 这些天一直在准备期末考试,没上论坛。我这也期待着能去黑马学习呢
作者: 徐帅    时间: 2012-7-12 10:51
haiyualong 发表于 2012-7-12 10:36
客气了 这些天一直在准备期末考试,没上论坛。我这也期待着能去黑马学习呢 ...

呵呵。我也是,有段时间没学习java了。不过我开学大四,你 毕业了?
作者: 王海宇    时间: 2012-7-12 10:55
蓝色的枫叶 发表于 2012-7-12 10:51
呵呵。我也是,有段时间没学习java了。不过我开学大四,你 毕业了?

跟你一样  暑假后就进入大四了




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