对于作业,我尝试发送文件和与该文件对应的一些参数。 所以,我发送我的文件后,我的字符串。 问题是我的参数转到我的文件而不是我的变量。我理解这个问题,我的循环,只要他收到一些东西,继续写入文件,但我想停止它,并将我的参数从我的文件外面。
这是我的代码客户端:
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();
}
}
编辑: 我仍然想念一些东西,现在我的线程出错,我认为问题出在我的循环中,我在输入中读取了我的文件。 而且,实际上param仍然在我的文件中而不是在我的参数中...为什么循环不会在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();
}
}
答案 0 :(得分:-1)
您需要在流中使用某种标记来表示文件的结尾。我建议'\u0004'
这是EOF角色。基本上,在写完文件后写下这个字符,然后调整服务器中的循环,如下所示:
while((n=in.read(buf))!=(int)'\u0004')
out.write(buf,0,n);
现在,服务器在必要时停止读取文件,然后可以到处读取字符串。
此外,read
返回读取的字节数,而不是char。我将通过声明字节而不是字节数组一次传递一个字节。