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

被折叠的 条评论
为什么被折叠?



