
package IOStream;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
/**
* 服務器拿到網絡流傳輸的文件
* 通過本地流寫入磁盤
* 調用網絡輸出流返回成功信息
*/
public class TCPServer02 {
public static void main(String[] args) throws IOException {
ServerSocket serverSocket = new ServerSocket(8888);
Socket socket = serverSocket.accept();
File file = new File("C:\\Users\\ASUS\\Desktop\\新建文件夹2");
if(!file.exists()){
file.mkdirs();
}
InputStream inputStream = socket.getInputStream();
FileOutputStream fos = new FileOutputStream(file+"\\test2.jpg");
int i =0;
byte[] bytes1 = new byte[1024];
while ((i=inputStream.read(bytes1))!=-1){
fos.write(bytes1,0,i);
}
System.out.println("2222222");
OutputStream outputStream = socket.getOutputStream();
outputStream.write("成功接收".getBytes());
fos.close();
socket.close();
serverSocket.close();
}
}
package IOStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
/**
* 客戶端先調用本地輸入流讀取文件
* 將數據流通過網絡輸出流傳給服務器
* 調用網絡輸入流接受成功信息
*/
public class TCPClient02 {
public static void main(String[] args) throws IOException {
Socket socket = new Socket("127.0.0.1",8888);
FileInputStream fis = new FileInputStream("C:\\Users\\ASUS\\Desktop\\新建文件夹\\test.jpg");
OutputStream outputStream = socket.getOutputStream();
int i =0;
byte[] bytes1 = new byte[1024];
while ((i=fis.read(bytes1))!=-1){
outputStream.write(bytes1,0,i);
}
System.out.println("22222222");
InputStream inputStream = socket.getInputStream();
byte[] bytes = new byte[1024];
int len = inputStream.read(bytes);
System.out.println(new String(bytes,0,len));
fis.close();
socket.close();
}
}

結束標記的方法為在socket中被定義的如下方法
void
shutdownInput()
将此套接字的输入流放置在“流的末尾”。
void
shutdownOutput()
禁用此套接字的输出流。
優化后的代碼
package IOStream;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Random;
public class TCPServer03 {
public static void main(String[] args) throws IOException {
ServerSocket serverSocket = new ServerSocket(8888);
while (true){
Socket socket = serverSocket.accept();
new Thread(new Runnable() {
@Override
public synchronized void run() {
try {
File file = new File("C:\\Users\\ASUS\\Desktop\\新建文件夹2");
if(!file.exists()){
file.mkdirs();
}
String filename = "caohao"+System.currentTimeMillis()+new Random().nextInt(99999)+".jpg";
InputStream inputStream = socket.getInputStream();
FileOutputStream fos = new FileOutputStream(file+"\\"+filename);
int i =0;
byte[] bytes1 = new byte[1024];
while ((i=inputStream.read(bytes1))!=-1){
fos.write(bytes1,0,i);
}
System.out.println("2222222");
OutputStream outputStream = socket.getOutputStream();
outputStream.write("成功接收".getBytes());
fos.close();
socket.close();
serverSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
}
}
}
package IOStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
/**
* 客戶端先調用本地輸入流讀取文件
* 將數據流通過網絡輸出流傳給服務器
* 調用網絡輸入流接受成功信息
*/
public class TCPClient02 {
public static void main(String[] args) throws IOException {
Socket socket = new Socket("127.0.0.1",8888);
FileInputStream fis = new FileInputStream("C:\\Users\\ASUS\\Desktop\\新建文件夹\\test.jpg");
OutputStream outputStream = socket.getOutputStream();
int i =0;
byte[] bytes1 = new byte[1024];
while ((i=fis.read(bytes1))!=-1){
outputStream.write(bytes1,0,i);
}
System.out.println("22222222");
socket.shutdownOutput();
InputStream inputStream = socket.getInputStream();
byte[] bytes = new byte[1024];
int len = inputStream.read(bytes);
System.out.println(new String(bytes,0,len));
fis.close();
socket.close();
}
}
来源:CSDN
作者:ch132
链接:https://blog.csdn.net/qq_43147121/article/details/104124465