任务要求:
客户端往服务器端发送一个文件(可以是图片或者word任意)
服务器端接收这个文件.(测试是否能够正常打开)
(可以倆俩测试 内网环境)
要发送的文件写死,比如 d:/hs.gif
先画张图理解下任务要求
其他的不多说,上代码:
Client.java
import java.io.*;
import java.net.Socket;
/**
* @author Bmo
* @date 2019/8/8 19:09
*/
public class Client {
private static final String PENDING_TRANSMISSION_FILE = "E:" + File.separator + "A.jpg";
public static void main(String[] args) {
try(Socket socket = new Socket("127.0.0.1", 9527)) {
System.out.println("客户端已连接");
BufferedOutputStream bos = new BufferedOutputStream(socket.getOutputStream());
transmissionFile(bos, new File(PENDING_TRANSMISSION_FILE));
} catch (IOException e) {
e.printStackTrace();
}
}
public static void transmissionFile(BufferedOutputStream bos, File file) throws IOException {
byte[] datas = new byte[1024 * 8];
FileInputStream fis = new FileInputStream(file);
int len = 0;
while ((len = fis.read(datas)) != -1) {
System.out.println("文件读取中");
bos.write(datas, 0, len);
}
bos.close();
System.out.println("文件已发送至服务器!");
}
}
Server.java
package homework;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
/**
* @author Bmo
* @date 2019/8/8 19:09
*/
public class Server {
private final static String TARGETFILE_LOCATION = "D:" + File.separator + "javahomework" + File.separator + "b.jpg";
public static void main(String[] args) {
try(ServerSocket server = new ServerSocket(9527)) {
System.out.println("服务启动完毕,正在等待连接···");
try(Socket socket = server.accept()) {
System.out.println("连接成功,传递文件中···");
while (true) {
BufferedInputStream bis = new BufferedInputStream(socket.getInputStream());
readAndWriteBytes(bis, new File(TARGETFILE_LOCATION));
}
} catch (IOException e) {
e.printStackTrace();
}
} catch (IOException ex) {
ex.printStackTrace();
}
}
public static void readAndWriteBytes(BufferedInputStream bis, File targertFile) throws IOException{
if (!targertFile.exists()) targertFile.createNewFile();
FileOutputStream fos = new FileOutputStream(targertFile, true);
byte[] datas = new byte[1024 * 8];
int len = 0;
while ((len = bis.read(datas)) != -1) {
fos.write(datas, 0, len);
}
fos.close();
System.out.println("文件传输完成!");
}
}
更加规范标准的代码:
FileUpload_Server.java
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
/**
* @author Bmo
* @date 2019/8/9 9:24
*/
public class FileUpload_Server {
public static void main(String[] args) throws IOException {
System.out.println("服务器启动···");
ServerSocket serverSocket = new ServerSocket(9527);
Socket accept = serverSocket.accept();
BufferedInputStream bis = new BufferedInputStream(accept.getInputStream());
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("copy.jpg"));
byte[] b = new byte[1024 * 8];
int len;
while((len = bis.read(b)) != -1) {
bos.write(b, 0, len);
}
bos.close();
bis.close();
accept.close();
System.out.println("文件接受完毕");
}
}
FileUPload_Client.java
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.Socket;
/**
* @author Bmo
* @date 2019/8/9 9:29
*/
public class FileUPload_Client {
public static void main(String[] args) throws IOException {
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("test.jpg"));
Socket socket = new Socket("localhost", 9527);
BufferedOutputStream bos = new BufferedOutputStream(socket.getOutputStream());
byte[] b = new byte[1024 * 8];
int len;
while((len = bis.read(b)) != -1) {
bos.write(b, 0, len);
bos.flush();
}
System.out.println("文件发送完毕");
bos.close();
socket.close();
bis.close();
}
}