知识:
BufferedWriter
是字符流,用于写入字符数据,通常与Writer
类一起使用。BufferedOutputStream
是字节流,用于写入字节数据,通常与OutputStream
类一起使用。BufferedWriter
通常与OutputStreamWriter
结合使用,后者将字符转换为字节,适合写入文本数据。BufferedOutputStream
直接与字节输出流结合使用,适合写入二进制数据或直接字节操作。
package TCP.com.practice2;
import java.io.*;
import java.net.Socket;
public class Client {
public static void main(String[] args) throws IOException {
//1.创建客户端socket对象
Socket socket = new Socket("127.0.0.1", 10000);
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("D:\\...\\java_project\\it\\clientdir\\a.png"));
// BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
BufferedOutputStream bos = new BufferedOutputStream(socket.getOutputStream());
byte[] bytes = new byte[1024];
int len;
while ((len = bis.read(bytes)) != -1) {
bos.write(bytes, 0, len);
}
//BufferedWriter是字符流,用于写入字符数据,通常与Writer类一起使用。
//BufferedOutputStream是字节流,用于写入字节数据,通常与OutputStream类一起使用
socket.shutdownOutput();//往Server端写入结束
BufferedReader dr=new BufferedReader(new InputStreamReader(socket.getInputStream()));
String line=dr.readLine();
System.out.println(line);
socket.close();
}
}
package TCP.com.practice2;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.UUID;
public class Server {
public static void main(String[] args) throws IOException {
ServerSocket serverSocket=new ServerSocket(10000);
Socket socket= serverSocket.accept();
BufferedInputStream bis=new BufferedInputStream(socket.getInputStream());
String res= UUID.randomUUID().toString().replace("-","");//生成随机字符串
BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream("D:\\...\\java_project\\it\\serverdir\\"+res+".png"));
int len;
byte[]bytes=new byte[1024];
while((len=bis.read(bytes))!=-1)
{
bos.write(bytes,0,len);
}
BufferedWriter bufferedWriter=new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
bufferedWriter.write("success");
bufferedWriter.newLine();//换行
bufferedWriter.flush();
socket.close();
serverSocket.close();
}
}