根据标号在两部分代码之间按顺序轮流看代码。
服务器端:Server
import java.io.*;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
public class TcpServerDemo02 {
public static void main(String[] args) throws Exception {
//1.创建服务器端口
ServerSocket serverSocket = new ServerSocket(9001);
//2.等待客户端连接
Socket socket = serverSocket.accept();
//8.得知客户端shutdownInput传输完毕信号,获取输入流
InputStream inputStream = socket.getInputStream();
//9.将socket输入流输出成文件
FileOutputStream fileOutputStream = new FileOutputStream(new File("receive.jpg"));
byte[] buffer = new byte[1024];
int len;
while((len = inputStream.read(buffer))!=-1){
fileOutputStream.write(buffer,0,len);
}
//10.告诉客户端我已经接收到了
OutputStream outputStream = socket.getOutputStream();
outputStream.write("我接收到了,你可以断开socket连接了".getBytes());
//11.关闭资源
outputStream.close();
fileOutputStream.close();
inputStream.close();
socket.close();
serverSocket.close();
}
}
客户端:Client
import java.io.*;
import java.net.InetAddress;
import java.net.Socket;
public class TcpClientDemo02 {
public static void main(String[] args) throws Exception {
//3.找到服务器地址端口,进行socket连接
Socket socket = new Socket(InetAddress.getByName("127.0.0.1"),9001);
// 4.创建输出流输出文件
OutputStream outputStream = socket.getOutputStream();
//5.读取文件
FileInputStream fis = new FileInputStream(new File("待提取.jpg"));
//6.将文件放入输出流outputStream
byte[] buffer = new byte[1024];
int len;
while((len = fis.read(buffer))!=-1){
outputStream.write(buffer,0,len);
}
//7.通知服务器,我已经传输完成了
socket.shutdownOutput();
//12.确认服务器接收到文件,断开连接(在没收到服务器的输出流之前,这里一直等待)
InputStream inputStream = socket.getInputStream();
//13.读取socket输入流的信息。
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] buffer2 = new byte[1024];
int len2;
while ((len2 = inputStream.read(buffer2))!=-1){
baos.write(buffer2,0,len2);
}
System.out.println(baos.toString());
//14.关闭资源
baos.close();
inputStream.close();
fis.close();
outputStream.close();
socket.close();
}
}