黑马程序员技术交流社区
标题:
多线程TCP问题
[打印本页]
作者:
chenyannna
时间:
2015-9-19 11:34
标题:
多线程TCP问题
问题:这个代码是服务端但是会出现问题。客户端上传图片时如果输入错,如“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();
}
}
}
复制代码
作者:
lion_good
时间:
2015-9-19 16:20
在catch里删除该文件
作者:
清心玉质
时间:
2015-9-20 15:38
对客户端的限制在客户端代码里写判断代码,如果格式错误根本不会传到服务端。
在客户端代码,文件路径通过主函数参数传进来,进行一系列判断
String s = args[0];
File f = new File(s);
if(!(f.getName().endsWith(".jpg"))){
System.out.println("传输文件格式错误");
return;
作者:
chenyannna
时间:
2015-9-21 15:36
清心玉质 发表于 2015-9-20 15:38
对客户端的限制在客户端代码里写判断代码,如果格式错误根本不会传到服务端。
在客户端代码,文件路径通过 ...
好的 谢谢
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2