Java 上传文件 Socket类应用 多线程上传 有注释哈,上传完请看看文件大小是否正常(二)

2014-11-23 23:22:30 · 作者: · 浏览: 2
ile; import java.io.FileInputStream; import java.io.IOException; import java.io.PrintStream; import java.net.InetAddress; import java.net.Socket; import java.net.UnknownHostException; /** * 客户端类 * * @author kaifang * */ public class SocketUp { public static void main(String[] args) { System.out.println("客户端启动。。。"); upFiles(); System.out.println("客户端关闭。。。"); } public static void upFiles() { Socket socket = null; BufferedInputStream inputStream = null; try { // 连接远程主机 socket = new Socket(InetAddress.getLocalHost(), 10001); // 读取本地文件的字节流 // File file = new File("F:\\Nano\\岁月的童话1.rmvb"); // File file = new File("aa.jpg"); File file = new File("cpy.mp3"); if (file.exists()) { inputStream = new BufferedInputStream(new FileInputStream(file)); // 通过Socket获取输出字节流 PrintStream writer = new PrintStream(socket.getOutputStream(), true); // 首先发送文件名到服务器 writer.write(file.getName().getBytes()); // 接收服务器回馈 BufferedInputStream reader = new BufferedInputStream( socket.getInputStream()); byte[] bys = new byte[1024 * 10]; int len = 0; len = reader.read(bys); String flag = new String(bys, 0, len); if ("ok".equals(flag)) { // 循环读取文件并发送 while ((len = inputStream.read(bys)) != -1) { writer.write(bys, 0, len); } // 告知服务器上传完毕 socket.shutdownOutput(); // 接收服务器回馈 len = reader.read(bys); System.out.println(new String(bys, 0, len)); } } else { System.out.println("文件不存在!"); } } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { // 关闭资源 if (inputStream != null) { try { inputStream.close(); socket.close(); } catch (IOException e) { e.printStackTrace(); } } } } }