你直接设置一个监听的程序就是那,时刻运行就是那
socket有流过来就输出来就是那!一定要有触发产生吗?

解决方案 »

  1.   

    如果Socket有数据来,你相关的接受流,就会接受到数据。
    啥叫“因为Socket没有数据到达的通知”啊,不会有这种情况的。
      

  2.   

    在线程的 run() 中不断读 Socket 的内容,不为 null 则输出
      

  3.   

    运行一个线程,用来执行Socket流的读取和写到GUI里。
    效率是不是高,不太清楚,但是一般都是这样做的吧。
      

  4.   

    没听说过,有别的办法。
    即使实现如同到达通知,也是基于启动一个不断测试socket内容的线程,若有数据,就发送数据到达通知,相应的注册监听类进行处理(这里就是显示接收到内容)。
      

  5.   

    在线程的 run() 中不断读 Socket 的内容,不为 null 则输出这种方法效率会不会太低了。我是过这个方法,感觉界面有停滞的迹象,是不是我应该把线成的优先级降低?有一个叫IPWorks的东西,里面有一个IPPort类,里面有几个方法,比如有数据到达
    fireDataIn方法会被自动调用,只要我继承这个类,并重载这个方法,就可以实现。但是我想
    他内部也是用Socket类实现的吧。因为这个东西要cd-key的,所以我没办法在我自己的prj中使用
    ,我只是想做一个简单的调试工具.
      

  6.   

    或者哪位老兄贴一段让Thread后台运行的例子给我吧。这是我线程类的代码
    public class ReadThread extends Thread {
        private Socket s;
        public ReadThread(Socket s) {
            this.s = s;
        }
        public void run() {
            while (true) {
                try {
                    InputStream is = s.getInputStream();
                    byte[] buff = new byte[10000];
                    int readByte;
                    if ( (readByte = is.read(buff)) != -1) {
                        System.out.println(new String(buff, 0, readByte));
                    }
                    else {
                        return;
                    }
                }
                catch (Exception e) {
                    System.out.println("--------------- In thread.");
                    e.printStackTrace();
                }
            }
        }
    }这是我的GUI中调用的方法
        private boolean connectSvr() {
            try {
                sock = new Socket(textIP.getText(),
                                  Integer.parseInt(textPort.getText()));
                ReadThread rt = new ReadThread(sock);
                rt.setDaemon(true);
                rt.setPriority(Thread.MIN_PRIORITY);
                rt.run();
                return true;
            } catch (Exception e) {
                e.printStackTrace();
                return false;
            }
        }现在的情况是,rt.run()一旦被运行,界面就不动了。