利用TCP进行文件上传到服务端

本文介绍了一个简单的TCP文件上传实现方案,包括客户端发送文件至服务器及服务器接收并存储文件的完整流程。客户端通过Socket连接服务器并将本地文件逐字节读取发送;服务器端接收这些字节并写入新文件。
package tcpupload;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;

/*
 * 文件上传,客户端发送一个文件
 * 读取文件内容,发送服务器端
 */
public class Client {

	public static void main(String[] args) throws IOException {
		//建立客户端
		Socket socket = new Socket("192.168.2.25", 55555);
		//获取IO流输出流对象
		OutputStream out = socket.getOutputStream();
		//获取资源文件输入流对象
		FileInputStream fis = new FileInputStream("D:\\a.txt");
		
		//读取文件内容
		int b;
		while((b=fis.read())!=-1) {
			//输出数据给服务器
			out.write(b);
		}
		//关闭资源文件输入流
		fis.close();
		//告知服务器,不再发送数据了
		socket.shutdownOutput();
		//获取IO流输入流对象
		InputStream in = socket.getInputStream();
		//输入数据
		int read = in.read();
		System.out.println(read);
		System.out.println((char)read);
		//关闭socket
		socket.close();
	}

}
package tcpupload;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

/*
 * 文件上传,服务器端接收客户端的文件
 * 
 * 接收文件内容,写出到某个文件
 */
public class Server {

	public static void main(String[] args) throws IOException {
		
		//建立服务器端
		ServerSocket ss = new ServerSocket(55555);
		//通过Socket服务获取Socket,已经完成了连接动作
		Socket socket = ss.accept();
		//建立连接后,通过Socket中的IO流(Socket流)进行数据的传输。
		InputStream in = socket.getInputStream();
		//获取上传文件在服务器端的那个文件输出流
		FileOutputStream fos = new FileOutputStream("D:\\copy.txt");
		//反复使用一个字节接收
		int b;
		while((b=in.read())!=-1) {
			//每上传一个字节,就写到服务器这个文件中一个字节
			//最终这个文件就接收了所有上传的数据.即文件上传
			fos.write(b);
		}
		
		//关闭文件流对象
		fos.close();
		
		//获取输出流,响应数据
		OutputStream out = socket.getOutputStream();
		out.write("o".getBytes()[0]);
		
		//关闭socket
		socket.close();
		ss.close();
	}

}

大家可以使用字节数组去读取和写入,这样效率比较高,可以参见另一个博客

http://blog.youkuaiyun.com/qq_26106607/article/details/79123496

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值