本帖最后由 smile_joe 于 2013-5-1 14:17 编辑
创建一个服务器,对外提供端口,多个客户端可同时访问,并可以上传文件到指定目录
但是我的怎么到中途就不执行了,找死我了,找不到哪里出了问题,请帮忙看看---------我头大休息下
万分感谢...................
---------------------------------------------------------------------------------服务端
package cn.joe.Tcp;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;
public class Test_Server {
public static void main(String[] args) throws Exception {
ServerSocket ss = new ServerSocket(6666);// 创建服务器收发对象
while (true) { // 循环运行
final Socket s = ss.accept();// 得到链接
new Thread() {// 多线程,每一个客户端新一个线程
public void run() {
try {
// 输入输出流
InputStream is = s.getInputStream();
OutputStream os = s.getOutputStream();
BufferedReader br = new BufferedReader(
new InputStreamReader(is));// 包装
PrintStream ps = new PrintStream(os);// 包装
// 接收文件名检查文件是否存在,把结果返回给客户端
String filename = br.readLine();
long filelength = Long.parseLong(br.readLine());
File f = new File("E:/devlop", filename);// 读取后指定到此文件
if (f.exists() && f.length() == filelength) {
ps.print("文件已存在");
return;// 退出方法
} else {
ps.print(f.length());
}
String ip = s.getInetAddress().getHostAddress();// 获取链接此接口ip字符串
System.out.println(ip
+ (f.exists() ? "断点续传" : " 正在上传 ") + filename);// 输出信息
long start = System.currentTimeMillis();
// 定义指向文件读取网络写入文件
FileOutputStream fos = new FileOutputStream(f, true);
byte[] b = new byte[1024];
int len;
while ((len = is.read(b)) != -1)
// 读取客户段
fos.write(b, 0, len);
fos.close();
s.close();// 释放
long end = System.currentTimeMillis();
System.out.println(ip + " 上传完毕 " + filename + ".耗时: "
+ (start - end) + " 毫秒.");
} catch (IOException e) {
e.printStackTrace();
}
}
}.start();
}
}
}
-----------------------------------------------------------------------------------------------客户端
package cn.joe.Tcp;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintStream;
import java.net.Socket;
import java.util.Scanner;
public class Test_Client {
public static void main(String[] args) throws Exception {
Socket s = new Socket("192.168.0.3", 6666);// 指定服务器ip,端口进行访问
// 获取输入输出流
InputStream is = s.getInputStream();
OutputStream os = s.getOutputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));// 包装
PrintStream ps = new PrintStream(os);// 包装
// 指定文件
File f = getFile();
// 发送文件到服务器
ps.println(f.getName());
ps.println(f.length());
// 接收结果,判断是否存在
String result = br.readLine();
if ("存在".equals(result)) {
System.out.println("上传文件已经存在");
return;
}
// 指向文件,读取文件写入网络,因为要读取非文本文件使用字节流
FileInputStream fis = new FileInputStream(f);
long filelength = Long.parseLong(result);// 服务端已完成的大小
fis.skip(filelength);// 跳过上次完成的字节数
byte[] b = new byte[1024];
int len;
while ((len = fis.read(b)) != -1)
// 读取文件
os.write(b, 0, len); // 写入
fis.close();
s.close();
System.out.println("上传完毕");
}
// 对接收文件进行判断
private static File getFile() {
System.out.println("请输入一个文件路径:");
Scanner sc = new Scanner(System.in);
while (true) {
File file = new File(sc.nextLine());// 指定文件
if (!file.exists())// 判断路径
System.out.println("输入的路径不存在");
else if (file.isDirectory())
System.out.println("暂时不支持文件夹上传,谢谢");
else
// if(file.isFile() && file.length()<1024*1024*100)
return file;// 如果是文件,并且大小小于100M接收
}
}
}
求帮忙... |