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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© chenyannna 中级黑马   /  2015-9-19 11:34  /  241 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

问题:这个代码是服务端但是会出现问题。客户端上传图片时如果输入错,如“1...jpg”这样的,尽管会提示异常。但是在目的地
e盘也会建立文件。空的jpg文件。怎么修改会让客户端传的是错的时候就只提示信息。而不建立文件呢
  1. import java.io.File;
  2. import java.io.FileOutputStream;
  3. import java.io.InputStream;
  4. import java.io.OutputStream;
  5. import java.net.ServerSocket;
  6. import java.net.Socket;

  7. //Tcp上传图片多客户端上传
  8. //定义线程:明确每一个客户端要在服务端执行的代码,将其放到run方法中
  9. class PicThread implements Runnable {
  10.         private Socket s;// 获取哪个客户端还不知道就传进来

  11.         PicThread(Socket s) {
  12.                 this.s = s;
  13.         }

  14.         public void run() {
  15.                 int count = 1;// 为了防止上传覆盖做计数操作
  16.                 String ip = s.getInetAddress().getHostAddress();
  17.                 try { // 来一个客户端就在这里进行处理
  18.                         System.out.println(ip);
  19.                         InputStream in = s.getInputStream();
  20.                         File file = new File("e:\\" + ip + "(" + (count) + ")" + ".jpg");
  21.                         while (file.exists()) {
  22.                                 file = new File("e:\\" + ip + "(" + (count++) + ")" + ".jpg");
  23.                         }
  24.                         FileOutputStream fos = new FileOutputStream(file);
  25.                         byte[] buf = new byte[1024];
  26.                         int len = 0;
  27.                         while ((len = in.read(buf)) != -1) {
  28.                                 fos.write(buf, 0, len);
  29.                         }
  30.                         OutputStream out = s.getOutputStream();
  31.                         out.write("上传成功".getBytes());
  32.                         fos.close();
  33.                         s.close();
  34.                 } catch (Exception e) {
  35.                         throw new RuntimeException(ip + ":上传失败");
  36.                 }
  37.         }
  38. }

  39. public class TcpServer5 {
  40.         public static void main(String[] args) throws Exception {
  41.                 ServerSocket ss = new ServerSocket(20000);
  42.                 while (true) {
  43.                         Socket s = ss.accept();// 阻塞式方法
  44.                         // 循环建立线程。有一个客户端就建立一个
  45.                         new Thread(new PicThread(s)).start();
  46.                 }
  47.         }
  48. }
复制代码

3 个回复

倒序浏览
在catch里删除该文件
回复 使用道具 举报
对客户端的限制在客户端代码里写判断代码,如果格式错误根本不会传到服务端。
在客户端代码,文件路径通过主函数参数传进来,进行一系列判断
String s = args[0];
                File f = new File(s);
                if(!(f.getName().endsWith(".jpg"))){
                        System.out.println("传输文件格式错误");
                        return;
回复 使用道具 举报
清心玉质 发表于 2015-9-20 15:38
对客户端的限制在客户端代码里写判断代码,如果格式错误根本不会传到服务端。
在客户端代码,文件路径通过 ...

好的 谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马