三次握手:TCP协议中,在发送数据的准备阶段,客户端与服务器之间的三次交互,以保证连接的可靠。
①第一次握手,客户端向服务器端发出连接请求,等待服务器确认。
②第二次握手,服务器端向客户端回送一个响应,通知客户端收到了连接请求。
③ 第三次握手,客户端再次向服务器端发送确认信息,确认连接。整个交互过程如下图所示。
public class Demo3 { public static void main(String[] args) throws IOException { Socket client = new Socket("127.0.0.1",6666); System.out.println("客户端已连接,准备上传文本文件..."); //从磁盘文件中读取文件 BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream("d:\\a.txt"))); //从网络流中发送数据 BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(client.getOutputStream())); //循环读取文件 String str = ""; while ((str = reader.readLine())!= null){ //读一行,向网络中写一行 writer.write(str); writer.newLine(); writer.flush(); } //通知服务器,关闭网络输出流 client.shutdownInput(); writer.close(); reader.close(); client.close(); }}
public class Demo3Server { public static void main(String[] args) throws IOException { ServerSocket serverSocket = new ServerSocket(6666); Socket client = serverSocket.accept(); System.out.println("client已连接"); //创建网络的输入流,从客户端网络中读取数据 BufferedReader reader = new BufferedReader(new InputStreamReader(client.getInputStream())); //文件输出流,将读取的数据保存到文件中 BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("d:\\text.txt"))); //循环从网络中读取 String str =""; while ((str = reader.readLine())!= null){ //读一行,向文件中保存写一行 writer.write(str); writer.newLine(); writer.close(); } writer.close(); reader.close(); client.close(); serverSocket.close(); }}