0

对于家庭作业,我尝试发送一个文件和与该文件相对应的一些参数。所以,我发送我的文件并在我的字符串之后。问题是我的参数转到我的文件而不是我的变量中。我理解这个问题,只要他收到一些东西,我的循环就会继续写入文件,但我想停止它并将我的参数放在我的文件之外。

这是我的代码客户端:

public static void transfert(InputStream in, OutputStream out) throws IOException{
        PrintWriter printOut;
        byte buf[] = new byte[1024];   
        int n;
        while((n=in.read(buf))!=-1)
            out.write(buf,0,n);


        printOut = new PrintWriter(out);
        printOut.println("add");
        System.out.println("envoie !!!");
        printOut.println("1");
        printOut.println("3");
       // out.write(getBytes("add"),0,0);
        printOut.flush();
    }

这里是我的服务器代码:

public static void transfert(InputStream in, OutputStream out, boolean closeOnExit) throws IOException
    {        
        byte buf[] = new byte[1024];

        int n;
        while((n=in.read(buf))!=-1)
            out.write(buf,0,n);

        buffIn = new BufferedReader (new InputStreamReader(in));
        String nom_methode = buffIn.readLine();
        String param1 = buffIn.readLine();
        String param2 = buffIn.readLine();
        System.out.println("methode:"+nom_methode+"param1:"+param1+"param2:"+param2);

        if (closeOnExit)
        {
            in.close();
            out.close();
        }     
    }

编辑:我仍然想念一些东西,现在我的线程有一个错误,我认为问题出在我的循环中,它在输入中读取了我的文件。此外,实际上参数仍然在我的文件中而不是在我的参数中......为什么循环在 EOF 之后没有停止?

错误:

Exception in thread "Thread-0" java.lang.IndexOutOfBoundsException
    at java.io.FileOutputStream.writeBytes(Native Method)
    at java.io.FileOutputStream.write(FileOutputStream.java:318)
    at serveurthread.AcceptClient.transfert(AcceptClient.java:45)
    at serveurthread.AcceptClient.run(AcceptClient.java:84)
    at java.lang.Thread.run(Thread.java:722)

client:
 public static void transfert(InputStream in, OutputStream out) throws IOException{
        PrintWriter printOut;
        printOut = new PrintWriter(out);
        byte buf[] = new byte[1024];   
        int n;
        while((n=in.read(buf))!=-1)
            out.write(buf,0,n);


        printOut.print('\u0004');
        printOut.flush();
        printOut.println("add");   
        System.out.println("envoie !!!");
        printOut.println("1");
        printOut.println("3");
       // out.write(getBytes("add"),0,0);
        printOut.flush();
    }

服务器:

public static void transfert(InputStream in, OutputStream out, boolean closeOnExit) throws IOException
    {        
        byte buf[] = new byte[1024];

    int n;
    while((n=in.read(buf))!= (int)'\u0004'){
        out.write(buf,0,n);
    }

    buffIn = new BufferedReader (new InputStreamReader(in));
    String nom_methode = buffIn.readLine();
    String param1 = buffIn.readLine();
    String param2 = buffIn.readLine();
    System.out.println("methode:"+nom_methode+"param1:"+param1+"param2:"+param2);

    if (closeOnExit)
    {
        in.close();
        out.close();
    }     
}
4

1 回答 1

-1

您将需要在流中使用某种标记来表示文件的结尾。我建议'\u0004'哪个是 EOF 字符。基本上,写完文件后写这个字符,然后在服务器中调整循环如下:

while((n=in.read(buf))!=(int)'\u0004')
    out.write(buf,0,n);

现在,服务器在必要时停止读取文件,然后可以开始读取字符串。

此外,read返回读取的字节数,而不是字符。我将通过声明字节而不是字节数组来一次传递一个字节。

于 2013-09-28T21:27:58.073 回答