目录
实现客户端循环发消息给服务端
回顾:
精华笔记:
实现客户端循环发消息给服务端
需要注意的几个点:
1:当客户端不再与服务端通讯时,需要调用socket.close()断开链接,此时会发送断开链接的信号给服务端。这时服务端的br.readLine()方法会返回null,表示客户端断开了链接。
2:当客户端链接后不输入信息发送给服务端时,服务端的br.readLine()方法是出于阻塞状态的,直到读取了一行来自客户端发送的字符串。
1.TCP的三次握手和四次挥手;
a.TCP连接时需要进行三次握手;
b. 双方断开链接时要进行四次挥手;
c.多客户端链接;
之前只有第一个连接的客户端可以与服务端说话。
原因: 服务端只调用过一次accept方法,因此只有第一个客户端链接时服务端接受了链 接并返回了Socket,此时可以与其交互。而第二个客户端建立链接时,由于服务端没有再次调 用accept,因此无法与其交互。
2. 多线程:
a.定义,
线程:顺序/的单一程序执行流程/就是一个线程(代码一句一句的有先后顺序的执行)
多线程:多个/单一顺序执行的流程/并发运行(造成"感官上同时运行"的效果);
并发:微观上走走停停,宏观上感觉一起运行的现象成为并发运行! (由于CPU执行 时间在纳秒级别,我们感觉不到切换线程运行的过程。)
b.用途:
*多个代码片段执行顺序有冲突时,希望它们各干各的时,就应当放在不同线程 上"同时"运行。
*一个线程可以运行,但是多个线程可以更快时,可以使用多线程运行。
c.线程的生命周期图:
d. 创建线程的两种方式:
@方式一:继承Thread并重写run方法
定义一个线程类,重写run方法,在run方法中定义线程要执行的任务;
注:启动该线程要调用该线程的start方法,而不是run方法!!!
优缺点:
优点:结构简单,便于匿名内部类形式创建。
缺点:
1:继承冲突:java单继承,会导致不能再继承其他类去复用方法。
2:耦合问题:会导致线程与线程任务绑定在了一起,不利于线程的重用。
@方式二:
a.实现Runnable接口单独定义线程任务;
b.匿名内部类形式的线程创建
c.主线程:执行main方法的线程称为"主线程";(java中的代码都是靠线程运行的)。
线程提供了一个方法:static Thread currentThread(),该方法可以获取运行这个 方法的线程。
e.使用多线程实现多客户端连接服务端;
流程图: