A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张少威 中级黑马   /  2012-6-2 20:18  /  1397 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 张少威 于 2012-6-2 22:55 编辑

我不知道是不是我的思路有问题。目的是客户端从服务器端下载到某文件。服务器端ServerSocket启动后,客户端建立socket,客户端向流中写入消息类型,需要的文件名等等,然后从流中逐个字节开始读文件的字节(我认为这时流中没有东西客户端程序会暂时阻塞在这),服务器端识别出消息类型,将需要的文件逐个字节写入流。

大概的代码如下

客户端
  1. public void downloadFile(String groupName, String filePath, String fileName) {
  2.         try {
  3.             Socket socket = new Socket(serverIP, filePort);
  4.             InputStream is = socket.getInputStream();
  5.             ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());
  6.             oos.writeObject(new Integer(ClientToServerMessageType.DownloadFile));
  7.             oos.writeObject(new String(account));
  8.             oos.writeObject(new String(groupName));
  9.             oos.writeObject(new String(fileName));
  10.             oos.writeObject(new Long(0));
  11.             oos.flush();
  12.             File file = new File(filePath + fileName);
  13.             FileOutputStream dos = new FileOutputStream(file);
  14.             int temp;
  15.             do {
  16.                 temp = ois.read();
  17.                 dos.write(temp);         //问题就在这,我发现卡在这个循环中,不能跳出,我认为服务器端将-1写进去了的,应该能跳出
  18.             }while(temp != -1);
  19.             dos.flush();
  20.             oos.close();
  21.             dos.close();
  22.             is.close();
  23.             JOptionPane.showMessageDialog(null, "文件下载成功");
  24.         } catch (FileNotFoundException e) {
  25.             // TODO Auto-generated catch block
  26.             e.printStackTrace();
  27.         } catch (UnknownHostException e) {
  28.             // TODO Auto-generated catch block
  29.             e.printStackTrace();
  30.         } catch (IOException e) {
  31.             // TODO Auto-generated catch block
  32.             e.printStackTrace();
  33.         }
  34.     }
复制代码
服务器端
  1. //前面的那些account,groupName等已经从流中无误地读出来了,这是向流中写文件的数据
  2. private void provideFile(String groupName, String fileName, ObjectOutputStream oos) {
  3.         File file = new File(ServerFileSavePath.fileSavePath + "\\" + groupName + "\\" + fileName);
  4.         FileInputStream dis;
  5.         try {
  6.             dis = new FileInputStream(file);
  7.             int temp;
  8.             do {
  9.                 temp = dis.read();
  10.                 oos.write(temp);
  11.             }while(temp != -1);
  12.             oos.flush();
  13.         } catch (FileNotFoundException e) {
  14.             // TODO Auto-generated catch block
  15.             e.printStackTrace();
  16.         } catch (IOException e) {
  17.             // TODO Auto-generated catch block
  18.             e.printStackTrace();
  19.         }
  20.     }
复制代码

2 个回复

倒序浏览
do {

                temp = ois.read();//你的这个ois哪来的?

                dos.write(temp);         //问题就在这,我发现卡在这个循环中,不能跳出,我认为服务器端将-1写进去了的,应该能跳出

回复 使用道具 举报
完整的 类 有没有 这样子叫人家怎么看呢? 服务端一个class 客户端一个class 有吗
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马