Java: TCP 文件上传
Server & Client
Utils.java
package den;
import java.io.*;
import java.nio.charset.StandardCharsets;
public class Utils{
public static byte[] streamToByteArray(InputStream inputStream) throws IOException{
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
byte[] buf = new byte[1024];
int len;
while((len = inputStream.read(buf)) != -1){
byteArrayOutputStream.write(buf, 0, len);
}
byte[] bytes = byteArrayOutputStream.toByteArray();
byteArrayOutputStream.close();
// inputStream.close(); 会引起相关socket关闭
return bytes;
}
public static String streamToString(InputStream inputStream) throws IOException{
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream, StandardCharsets.UTF_8));
String line;
StringBuilder stringBuilder = new StringBuilder();
while((line = bufferedReader.readLine()) != null){
stringBuilder.append(line).append("\n");
}
// inputStream.close();
return stringBuilder.toString();
}
}
UploadServer.java
package den;
import java.io.*;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
public class UploadServer{
public static void main(String[] args) throws IOException{
ServerSocket serverSocket = new ServerSocket(5555, 2048, InetAddress.getLocalHost());
System.out.println("serverSocket.getLocalSocketAddress() = " + serverSocket.getLocalSocketAddress());
Socket socket = serverSocket.accept();
InputStream inputStream = socket.getInputStream();
byte[] bytes = Utils.streamToByteArray(inputStream);
BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(new FileOutputStream("src/p.png"));
bufferedOutputStream.write(bytes);
OutputStream outputStream = socket.getOutputStream();
BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream));
bufferedWriter.write("server aa\n");
bufferedWriter.write("server bb\n");
bufferedWriter.newLine();
bufferedWriter.flush();
bufferedOutputStream.close();
bufferedWriter.close();
inputStream.close();
outputStream.close();
socket.close();
serverSocket.close();
// FileInputStream fileInputStream = new FileInputStream("src/img.png");
// byte[] bytes = Utils.streamToByteArray(fileInputStream);
// FileInputStream fileInputStream = new FileInputStream("src/b.properties");
// String s = Utils.streamToString(fileInputStream);
// System.out.println("s = " + s);
}
}
UploadClient.java
package den;
import java.io.*;
import java.net.InetAddress;
import java.net.Socket;
public class UploadClient{
public static void main(String[] args) throws IOException{
Socket socket = new Socket(InetAddress.getLocalHost(), 5555);
FileInputStream fileInputStream = new FileInputStream("src/img.png");
byte[] bytes = Utils.streamToByteArray(fileInputStream);
OutputStream outputStream = socket.getOutputStream();
BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(outputStream);
bufferedOutputStream.write(bytes);
socket.shutdownOutput();
InputStream inputStream = socket.getInputStream();
String s = Utils.streamToString(inputStream);
System.out.println(s);
bufferedOutputStream.close();
socket.close();
}
}
分类:
Java
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
2021-04-03 原生JS实现贪吃蛇
2021-04-03 原生JS实现消息提示框