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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

/*
编写一个聊天程序,
有收数据的部分,和发数据的部分,
这两部分需要同时执行
那就需要用到多线程计算
一个线程控制收,一个线程控制发。

因为收和发动作是不一致的,所以要定义两个run方法
而且这两个方法要封装到不同的类中
*/
问:程序可以运行,就是发送一次数据后就停止在那里卡住了,求同学帮我剖析下出现这种问题的解决方法,可能是线程的问题

QQ图片20150509141950.png (111.42 KB, 下载次数: 8)

QQ图片20150509141950.png

2.png (111.49 KB, 下载次数: 8)

2.png

3.png (6.1 KB, 下载次数: 8)

3.png

4 个回复

正序浏览
原来是if判断886后面多了个 ; 分号, 我的天,,问题给我再次敲一遍代码解决了。。自导自演。也是练习到了!{:2_34:}

if.png (4.58 KB, 下载次数: 9)

if.png
回复 使用道具 举报
如图,只能发送一次数据,再次发送就卡住在那了

11.png (7.19 KB, 下载次数: 9)

11.png
回复 使用道具 举报
直接送黑马币哈
回复 使用道具 举报
本帖最后由 谢永烽 于 2015-5-9 14:29 编辑

import java.net.*;
import java.io.*;
//Udp发送线程
class UdpSend implements Runnable
{
        //1,定义Socket服务引用
        private DatagramSocket ds;
        public UdpSend(DatagramSocket ds)
        {
                this.ds = ds;
        }
        public void run()
        {
                try
                {
                        //2,确定数据,从键盘录入,并把键盘录入的数据封装成数据包
                        DatagramPacket dp = null;
                        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
                        String line = null;
                        while ((line=br.readLine())!=null)
                        {
                                byte[] buf = line.getBytes();
                                dp =new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.0.2"),10002);

                                //3,通过Socket服务将已有的数据包发送出去
                                ds.send(dp);
                                if("886".equals(line));
                                {       
                                        break;
                                }
                        }
                        //4,关闭资源
                        //ds.close();
                }
                catch (Exception e)
                {
                        throw new RuntimeException("发送数据失败啦");
                }
       
        }
}
//Udp接收线程
class UdpRece implements Runnable
{
        //1,定义Socket服务引用
        private DatagramSocket ds;
        public UdpRece(DatagramSocket ds)
        {
                this.ds = ds;
        }
        public void run()
        {
                try
                {
                        //一直处于接收状态
                        while (true)
                        {
                                //2,定义数据包,用于存数数据
                                byte[] buf = new byte[1024];
                                DatagramPacket dp = new DatagramPacket(buf,buf.length);
                                //3,通过Socket服务,将数据接收并存储到数据包中
                                ds.receive(dp);
                                //4,通过数据包的方法获取其中的数据
                                String ip = dp.getAddress().getHostAddress();
                                String data = new String(dp.getData(),0,dp.getLength());
                                int port = dp.getPort();

                                System.out.println("ip:"+ip+" 信息:"+data);
                        }
                        //5关闭资源
                        //ds.close();
                }
                catch (Exception e)
                {
                        throw new RuntimeException("接收端接收数据失败啦");
                }
        }
}
class  UdpChatDemo
{
        public static void main(String[] args) throws Exception
        {
                 new Thread(new UdpSend(new DatagramSocket())).start();
                 new Thread(new UdpRece(new DatagramSocket(10002))).start();
        }
}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马