java - 关于socket 服务端的 while循环 报错 求大神帮忙看看代码和错误信息
巴扎黑
巴扎黑 2017-04-17 16:22:20
[Java讨论组]

new Thread(){

        public void run(){                
            try {    
                Log.i("TService", "================>SHIT");
                service=new DatagramSocket(PORT);                    
                mExecutorService = Executors.newCachedThreadPool(); //创建线程池
                Log.i("TService", "=================>PLEASE");
                Socket client = null;    
                while(true){                                                                
                    mList.add(client);
                    Log.i("TService", "===================>llll");
                    new Service();
                    //mExecutorService.execute(new Service());
                    
                    
                                                                                                
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
        }
    }.start();
    
    Log.i("TService", "建立");        
    super.onCreate();
}

class Service implements Runnable{

    
    public Service(){
        byte data [] = new byte[1024];
        DatagramPacket packet =new DatagramPacket(data,data.length);
        try {                                                                
            service.receive(packet);
            Log.i("TService", "================>pppppppp");                                
            msg=new String(packet.getData(),packet.getOffset(),packet.getLength());                
            Log.i("TService", "=============>ooooo");                
            String stri="copy that";
            byte data3[]=stri.getBytes();
            DatagramPacket output=new DatagramPacket(data3, data3.length, packet.getSocketAddress());
            service.send(output);
            service.close();
            
        } catch (Exception e) {
            e.printStackTrace();
        }            
    }

这个是代码和错误信息 我写了个客户端广播了个信息 只有第一次打印出来了======>pppp和=======>ooooo后面好像都在while中循环 这个怎么跳出来啊 需要判断什么吗 求大神帮忙看看 提点我一下 小弟十分感谢 谢谢~~~~!!!

巴扎黑
巴扎黑

全部回复(2)
高洛峰

题主本意是否是想让Service多运行几次好观察程序执行情况?明显题主的代码无法达到目的,service被close掉了,自然再多循环也没用。另外,题主的 while循环是个死循环,假设题主想循环五次收发活动,可以这么写

int count = 5;
while (count-- > 0) {
        ...
        new Service();
        ...
}
service.close();

把 close放到 while循环外边。

PHP中文网

你第一次使用了DatagramSocket后就把它close了啊,后面循环当然用不了它了
你要收一次就跳出的话,可以这样:

private boolean flag = true;
while(flag){
 ...
 new Service()
 ...
}

Service里调用close()后将flag设为false。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号