TCP实现文件上传
演示TCP如何实现从客户端上传文件到服务器,可以用两台电脑连同一个局域网,一个作为客户端一个作为服务器实现,两台只要能Ping通就可以。这里由于设备限制用同一台电脑演示。
先放个图片到项目中
客户端代码实现
import java.io.*;
import java.net.InetAddress;
import java.net.InterfaceAddress;
import java.net.Socket;
import java.net.UnknownHostException;
public class Demo01Client {
public static void main(String[] args) throws IOException {
//1.创建一个socket连接
Socket socket = new Socket(InetAddress.getByName("127.0.0.1"),9000);
//2.创建一个输出流
OutputStream os = socket.getOutputStream();
//3.读取文件
FileInputStream fis = new FileInputStream("img.png");
//4.写出文件
byte[] buffer = new byte[1024];
int len;
while ((len = fis.read(buffer))!=-1){
os.write(buffer,0,len);
}
//5.通知服务器发送完毕
socket.shutdownOutput();
//6.确定服务端接收完毕才能断开连接
InputStream is = socket.getInputStream();
//String byte[]
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] buffer1 = new byte[1024];
int len1;
while ((len1=is.read(buffer1))!=-1){
baos.write(buffer1,0,len1);
}
System.out.println(baos.toString());
baos.close();
is.close();
fis.close();
os.close();
socket.close();
}
}
服务器代码实现
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 Demo01Server {
public static void main(String[] args) throws IOException {
//1.创建服务
ServerSocket serverSocket = new ServerSocket(9000);
//2.监听客户端连接
Socket socket = serverSocket.accept();
//3.获取输出流
InputStream is = socket.getInputStream();
//4.文件输出
FileOutputStream fos = new FileOutputStream("receive.png");
byte[] buffer = new byte[1024];
int len;
while ((len=is.read(buffer))!=-1){
fos.write(buffer,0,len);
}
//5.通知客户端接收完毕
OutputStream os = socket.getOutputStream();
os.write("服务端已接收".getBytes());
os.close();
fos.close();
is.close();
socket.close();
}
}
服务器接收到文件