我有一個服務器和多個客戶端,我試圖讓服務器線程同時向所有連接的客戶端發送一個文件。奇怪的是,有時文件被正確寫入有時筆記本電腦會發出噪音,文件被寫入控制檯,並且不會創建任何文件。我不會在兩次試驗之間對代碼進行任何更改。任何人都可以幫我解決這個問題嗎?由於在advance.Here發送服務器線程代碼服務器發送文件給客戶端java
try
{
out.println("AcceptFile,");
FileInputStream fis = new FileInputStream(fn);
byte[] buffer = new byte[fis.available()];
fis.read(buffer);
ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream()) ;
oos.writeObject(buffer);
oos.flush();
}
catch(Exception c)
{
System.err.println("exc" + c);
}
這裏是客戶端線程接收
try
{
ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
byte[] buffer = (byte[])ois.readObject();
String pic="copy"+studId+".pdf";
System.out.println(pic);
FileOutputStream fos = new FileOutputStream(pic);
fos.write(buffer);
fos.flush();
fos.close();
}
catch(Exception e)
{
System.out.println("Exception writing");
}
而在客戶端閱讀方面,您還需要滿足拆分數據包,因此您需要繼續閱讀,直到您閱讀了numToRead字節爲止。 – alpian 2011-04-26 23:36:00
@ user726092我已經嘗試過,但用小的改變來創建文件,但它不工作。這裏是客戶端'\t DataInputStream dis = new DataInputStream(socket.getInputStream()); int numToRead = dis.readInt(); ByteArrayInputStream bis = new ByteArrayInputStream(bytes); ObjectInputStream ois = new ObjectInputStream(bis); ois.readObject(); String pic =「copy」+ studId + 「.pdf」; System.out.println(pic); FileOutputStream fos = new FileOutputStream(pic); fos.write(bytes); \t fos.flush(); fos.close();' – 2011-04-26 23:41:45
和服務器端'out.println(「AcceptFile,」); \t \t \t ByteArrayOutputStream bos = new ByteArrayOutputStream(); \t \t ObjectOutputStream oos = new ObjectOutputStream(bos); \t \t oos.writeObject((Object)fn); \t \t \t \t byte [] bytes = bos.toByteArray(); \t \t \t \t DataOutputStream dos = new DataOutputStream(socket.getOutputStream()); \t \t \t // \t頭 \t \t dos.writeInt(bytes.length); \t \t dos.flush(); \t \t \t \t dos.write(bytes); \t \t dos.flush();' – 2011-04-26 23:42:37