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();
}
}
服務器接收到文件