模拟客户端上传文件到服务器
客户端类
package com.it.demo_FileUpload;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
public class TCPClient {
public static void main(String[] args) throws IOException {
Socket socket = new Socket("127.0.0.1", 8888);
FileInputStream fis = new FileInputStream("C:\\Users\\liyang\\Desktop\\1.jpeg");
OutputStream os = socket.getOutputStream();
int len = 0;
byte[] bytes = new byte[1024];
while ((len = fis.read(bytes)) != -1) {
os.write(bytes, 0, len);
}
/*
void shutdownOutput() 禁用此套接字的输出流。
对于TCP套接字,任何以前写入的数据都将被发送,并且后跟TCP的正常连接终止序列。
*/
socket.shutdownOutput();
InputStream is = socket.getInputStream();
while ((len = is.read(bytes)) != -1) {
System.out.println(new String(bytes, 0, len));
}
fis.close();
socket.close();
}
}
服务器类
package com.it.demo_FileUpload;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Random;
public class TCPServer {
public static void main(String[] args) throws IOException {
ServerSocket server = new ServerSocket(8888);
while (true) { // 让服务器一直处于监听状态(死循环accept方法)
Socket socket = server.accept();
new Thread(new Runnable() {
@Override
public void run() {
try {
InputStream is = socket.getInputStream();
File file = new File("E:\\upload");
if (!file.exists()) {
file.mkdir();
}
String fileName = "it" + System.currentTimeMillis() + new Random().nextInt(999999) + ".jpg";
FileOutputStream fos = new FileOutputStream(file + "\\" + fileName);
int len = 0;
byte[] bytes = new byte[1024];
while ((len = is.read(bytes)) != -1) {
fos.write(bytes, 0, len);
}
socket.getOutputStream().write("上传成功!".getBytes());
fos.close();
socket.close();
}
catch (IOException e) {
System.out.println(e);
}
}
}).start();
}
// server.close();
}
}