问题:这个代码是服务端但是会出现问题。客户端上传图片时如果输入错,如“1...jpg”这样的,尽管会提示异常。但是在目的地
e盘也会建立文件。空的jpg文件。怎么修改会让客户端传的是错的时候就只提示信息。而不建立文件呢
- import java.io.File;
- import java.io.FileOutputStream;
- import java.io.InputStream;
- import java.io.OutputStream;
- import java.net.ServerSocket;
- import java.net.Socket;
- //Tcp上传图片多客户端上传
- //定义线程:明确每一个客户端要在服务端执行的代码,将其放到run方法中
- class PicThread implements Runnable {
- private Socket s;// 获取哪个客户端还不知道就传进来
- PicThread(Socket s) {
- this.s = s;
- }
- public void run() {
- int count = 1;// 为了防止上传覆盖做计数操作
- String ip = s.getInetAddress().getHostAddress();
- try { // 来一个客户端就在这里进行处理
- System.out.println(ip);
- InputStream in = s.getInputStream();
- File file = new File("e:\\" + ip + "(" + (count) + ")" + ".jpg");
- while (file.exists()) {
- file = new File("e:\\" + ip + "(" + (count++) + ")" + ".jpg");
- }
- FileOutputStream fos = new FileOutputStream(file);
- byte[] buf = new byte[1024];
- int len = 0;
- while ((len = in.read(buf)) != -1) {
- fos.write(buf, 0, len);
- }
- OutputStream out = s.getOutputStream();
- out.write("上传成功".getBytes());
- fos.close();
- s.close();
- } catch (Exception e) {
- throw new RuntimeException(ip + ":上传失败");
- }
- }
- }
- public class TcpServer5 {
- public static void main(String[] args) throws Exception {
- ServerSocket ss = new ServerSocket(20000);
- while (true) {
- Socket s = ss.accept();// 阻塞式方法
- // 循环建立线程。有一个客户端就建立一个
- new Thread(new PicThread(s)).start();
- }
- }
- }
复制代码 |
|