不停地收听和传递数据

时间:2011-05-31 19:50:24

标签: java multithreading

此代码说明了我的问题:

//Constructor
public ReadFormat(String path, int nic) throws IOException{
     this.path = path;
     this.nic = String.valueOf(nic);        
    ReadTshark();    //Calls listening function
}

//listening stdout and sends to another
public void ReadTshark() throws IOException{
    String cmdTshark = path + " -S" + " -i "+ nic + " -R "+ "\"udp.port == 9000\" " + "-E header=y -E separator=, -Tfields -e frame.len -e frame.time_delta";  
    System.out.println(cmdTshark);
    String s=null;
    Process p = Runtime.getRuntime().exec(cmdTshark);
    BufferedReader stdInput = new BufferedReader(new InputStreamReader(p.getInputStream()));
    BufferedReader stdError = new BufferedReader(new InputStreamReader(p.getErrorStream()));
        // read the output from the command
    int i=0;
    while ((s = stdInput.readLine()) != null && b) {
            System.out.println(s);
            rawin[i]=s;
            if(i==100){
                Separate();    //When rawin reaches 100, sends to another function to process    
            }
        }
}

//receives data and sends to another function
private void Separate(){
}
//receives data and sends to another function
private void NextFunction{
}

如何在没有:

的情况下将数据函数传递给函数
  1. 停止聆听,否则;
  2. 继续将数据传递给函数,因此一旦发送数据,该函数将能够接收更多数据。
  3. 就像连锁店一样,立即发送并准备好接收!

2 个答案:

答案 0 :(得分:0)

如果要在线程之间移动流数据,则应查看PipedInputStreamPipedOutputStream类。你的ReadTshark()会将它读取的数据写入PipedOutputStream,而你的另一个线程会从链接的PipedInputStream中读取数据。

当然,我认为你的其他主题没有理由不直接使用p.getInputStream()

答案 1 :(得分:0)

虽然它没有回答您的具体问题,您是否考虑使用Java数据包捕获库而不是尝试从分叉的TShark捕获输出?

我发现JNetPCap非常容易使用。