TCP协议三次握手
第一次握手: 客户端给服务器发送一个TCP数据包,请求在它们之间建立连接。(你能收到吗?)
第二次握手: 服务器发回确认包。(能)
第三次握手: 客户端再次发送确认包。(确定能后发送数据)
服务端代码
//实现接受信息
public class ServerDemo1 {
public static void main(String[] args) {
try {
System.out.println("======服务端启动成功=====");
//1.注册端口
ServerSocket serverSocket=new ServerSocket(7777);
//2.必须调用accept()方法,等待接收客户端的Socket的连接请求
Socket socket=serverSocket.accept();
//3.从socket通信管道中得到一个字符输入流
InputStream is=socket.getInputStream();
//4.包装为高级的管道
BufferedReader br=new BufferedReader(new InputStreamReader(is));
//5.读取消息
String message="";
if((message=br.readLine())!=null){
System.out.println("客户端: "+message);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
客户端代码
package 网络编程.TCP;
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintStream;
import java.io.PrintWriter;
import java.net.Socket;
public class ClientDemo1 {
public static void main(String[] args) throws Exception {
System.out.println("=====客户端启动成功=====");
//1.创建Socket通信管道请求服务端连接
/*Socket(InetAddress address, int port)
创建流套接字并将其连接到指定IP地址的指定端口号。
*/
Socket socket=new Socket("localhost",7777);
//从socket通信管道中得到一个字节输入流,负责发送数据
OutputStream os= socket.getOutputStream();
//3.转化为最高级的打印流(字节流)
// PrintStream ps=new PrintStream(os);
PrintWriter pss=new PrintWriter(os);
//4.发送消息
pss.println("你好!我已与你对接!");
pss.flush();
}
}
—运行时需先打开服务端
再打开客户端
再看服务端的信息
结果如图: