我有一个服务器和多个客户端,我试图让服务器线程同时向所有连接的客户端发送一个文件。奇怪的是,有时文件被正确写入有时笔记本电脑会发出噪音,文件被写入控制台,并且不会创建任何文件。我不会在两次试验之间对代码进行任何更改。任何人都可以帮我解决这个问题吗?由于在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