#TCP
通过三次握手建立连接
Step 1:客户主机发送TCP SYN数据段到服务器(SYN=1,客户机制定起始序号seq=x)
Step 2:服务器主机收到SYN,用SYN+ACK数据段响应(SYN=1,ACK=1,seq=y;ack=x+1)
Step 3:客户收到SYN+ACK,用ACK数据段响应,可以包含数据(SYN=0,ACK=1,seq=x+1,ack=y+1) (当SYN=1,ACK=0表明这是一个连接请求报文,对方若同意建立连接,则在响应报文中使用SYN=1,ACK=1。SYN=1表示这是一个连接请求或连接接收报文)
释放连接过程
Step 1:客户结束发送TCP FIN控制数据段到服务器(FIN=1,seq=u)
Step 2:服务器收到FIN,用ACK响应。(ACK=1,seq=v,ack=u+1)
Step 3:服务器发送FIN(FIN=1,ACK=1,seq=w,ack=u+1)
Step 4:客户收到FIN,发送ACK确认关闭(ACK=1,seq=u+1,ack=w+1)
###1.TCP一对一聊天
实现客户端与服务器的交互。通过多线程实现端的Receive和Send独立
客户端
public class Cilent {
public static void main(String[] args) throws UnknownHostException, IOException {
//创建连接
Socket socket = new Socket("127.0.0.1",19999);
//创建输入输出流
Scanner scan = new Scanner(System.in);
PrintStream ps = new PrintStream(socket.getOutputStream());
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
new Receive(socket).start();
while(true) {
//向服务器发送消息
ps.println("客户端:"+scan.next());
}
}
}
服务器
public class Server {
public static void main(String[] args) throws IOException {
//创建连接
ServerSocket server = new ServerSocket(19999);
Socket socket = server.accept();
//创建流
Scanner scan = new S