【JAVA】Socket文件上传遇到的问题!~
来源:互联网 发布:赚钱的直播软件 编辑:程序博客网 时间:2024/03/29 22:28
同事做的socket通信上传文件有问题。让我改。发现每次得到文件名称。但是流已经写入了。文件名是第一次上传的文件名字。网上看了下就这样写的。也不知道原因,这里把错误代码贴下。大家帮我看下什么原因。。。新代码是网上找到的创建了个线程就好了。
服务器端:
错误代码:
package com.zssoft.mis.struts2.util;import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.FileOutputStream;import java.net.ServerSocket;import java.net.Socket;public class FileServer {private ServerSocket server = null;Socket socket = null;public void getData(String savePath,int port) {int progress = 0; try {// 建立socket监听。server = new ServerSocket(port);while ( (socket = server.accept()) != null) {// 建立socket输入流 DataInputStream inputStream = new DataInputStream(new BufferedInputStream(socket .getInputStream())); // 缓冲区大小 int bufferSize = 8192; // 缓冲区 byte[] buf = new byte[bufferSize]; int passedlen = 0; long len = 0; // 获取文件名称 if( !savePath.contains(".")) savePath += inputStream.readUTF(); DataOutputStream fileOut = new DataOutputStream( new BufferedOutputStream(new BufferedOutputStream( new FileOutputStream(savePath)))); // 获取文件长度 len = inputStream.readLong(); System.out.println("文件的长度为:" + len + " KB"); System.out.println("开始接收文件!"); // 获取文件,下边是进度条。 System.out.print("#>>>>>>>>#>>>>>>>>>#>>>>>>>>>#>>>>>>>>>#>>>>>>>>>#"); System.out.println(">>>>>>>>>#>>>>>>>>>#>>>>>>>>>#>>>>>>>>>#>>>>>>>>>#"); while (true) { int read = 0; if (inputStream != null) { read = inputStream.read(buf); } passedlen += read; if (read == -1) { break; } if((int)(passedlen * 100.0 / len)-progress > 0){ progress = (int)(passedlen * 100.0 / len);// System.out.println("文件接收了" + progress + "%"); System.out.print(">"); } fileOut.write(buf, 0, read); } System.out.println(); System.out.println("接收完成,文件存为: " + savePath); fileOut.close(); } }catch (Exception e){System.err.println("File Server Excetption: " + e);e.printStackTrace();}}public static void main(String[] args) { //函数运行之前要指定待传送文件地址。 /*if(args.length != 2){ System.err.println("Usage: FileServer <save path> <port>"); System.exit(-1); }*/ new FileServer().getData("F:\\", 9600); // new FileServer().getData(args[0], Integer.parseInt(args[1])); }}
正确代码:
package com.zssoft.mis.struts2.util;import java.net.ServerSocket;import java.net.Socket;public class FileServer {protected int listenPort = 9600;public static void main(String[] args) {FileServer server = new FileServer();server.acceptConnections();}/** * 建立链接 * */public void acceptConnections() {try {ServerSocket server = new ServerSocket(listenPort);Socket socket = null;while (true) {socket = server.accept();// handleConnection(socket);new ServerThread(socket).start();}} catch (Exception e) {System.out.println("Unable to bind to port " + listenPort);}}}
package com.zssoft.mis.struts2.util;import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.FileOutputStream;import java.net.Socket;public class ServerThread extends Thread {private Socket socket;public ServerThread(Socket socket) {this.socket = socket;}public void run() {try {DataInputStream inputStream = null;try {inputStream = new DataInputStream(new BufferedInputStream(socket.getInputStream()));} catch (Exception e) {System.out.print("接收消息缓存错误\n");return;}try {// 本地保存路径,文件名会自动从服务器端继承而来最好是web工程里的一个路径。String savePath = "F:\\";int bufferSize = 8192;byte[] buf = new byte[bufferSize];long len = 0;savePath += inputStream.readUTF();DataOutputStream fileOut = new DataOutputStream(new BufferedOutputStream(new BufferedOutputStream(new FileOutputStream(savePath))));len = inputStream.readLong();System.out.println("文件的长度为:" + len + "\n");System.out.println("开始接收文件!" + "\n");while (true) {int read = 0;if (inputStream != null) {read = inputStream.read(buf);}if (read == -1) {break;}// System.out.println(buf.toString());fileOut.write(buf, 0, read);}System.out.println("接收完成,文件存为" + savePath + "\n");fileOut.flush();fileOut.close();inputStream.close();} catch (Exception e) {System.out.println("接收消息错误" + "\n");return;}} catch (Exception e) {System.out.println("Error handling a client: " + e);}}}
客户端代码:
package com.zssoft.mis.struts2.util;import java.io.BufferedInputStream;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.net.Socket;public class FileClient {public void sendData(String filepath, String IP, int port) {int progress = 0; // socket输出流 DataOutputStream os = null; // 文件输入流 DataInputStream is = null; // 建立socket连接 Socket socket = null; try { // 选择进行传输的文件 File file = new File(filepath); // 建立socket连接 socket = new Socket(IP, port); os = new DataOutputStream(socket.getOutputStream()); // 将文件名及长度传给服务器端。 os.writeUTF(file.getName()); os.flush(); os.writeLong((long) file.length()); os.flush(); is = new DataInputStream(new BufferedInputStream( new FileInputStream(filepath))); // 缓冲区大小 int bufferSize = 8192; // 缓冲区 byte[] buf = new byte[bufferSize]; // 传输文件 while (true) { int read = 0; if (is != null) { read = is.read(buf); } progress += Math.abs(read); if (read == -1) { break; } os.write(buf, 0, read); //发送进度。 System.out.println("文件已发送:" + (int)(100.0*progress/file.length()) + "%"); } os.flush(); System.out.println("\n文件已上传完毕!");}catch (IOException e) { e.printStackTrace(); } finally { // 关闭所有连接 try { if (os != null) os.close(); } catch (IOException e) { } try { if (is != null) is.close(); } catch (IOException e) { } try { if (socket != null) socket.close(); } catch (IOException e) { } } } public static void main(String[] args) {new FileClient().sendData("D:\\aa.swf", "10.78.151.188", 9600);}}源代码下载:http://download.csdn.net/detail/hateson/6198049
转帖请注明原帖地址:http://blog.csdn.net/hateson/article/details/10927871
- 【JAVA】Socket文件上传遇到的问题!~
- 文件上传遇到的问题
- 关于java socket 传输文件时遇到的问题
- Java使用Socket传输文件遇到的问题
- java中springMVC文件上传遇到的问题
- 上传wmv文件遇到的问题
- jsp、servlet上传文件遇到的问题
- struts文件上传和遇到的问题
- struts文件上传和遇到的问题
- php上传文件遇到的问题
- nginx文件上传遇到的意外问题
- SrpingMVC 文件上传容易遇到的问题
- 文件上传时候可能遇到的问题
- 文件上传时,所遇到的问题
- Django文件上传遇到的问题
- vue中上传文件遇到的问题
- Socket遇到的问题
- 上传图片文件遇到的文件损坏问题
- 顺序线性表
- 在Fedora16中安装Qt
- Centos 下Skype安装
- linux sed
- 设计模式总结
- 【JAVA】Socket文件上传遇到的问题!~
- windows7 cocos2d-x 2.1.4 环境搭建(3 搭建安卓移植平台)
- 跨,跨,跨,我的2013半年总结
- 项目经理的成功之路
- Linux下makefile教程(一)
- 清远市代建项目管理局-网欣GOVPM政府投资代建工程项目管理软件解决方案
- Win8 压缩Compress与解压Decompress函数实例
- Silverlight5 + .NET4.0 + IIS6 发布
- POJ 3921 - Destroying the bus stations 构图最小费用最大流..