TCP多线程网络编程模型
Update date:
【服务端】
1、创建ServerSocket对象,绑定端口号;
2、创建死循环
2.1 调用accept()方法一直等待客户端的连接
2.2 创建线程,处理和客户端的通信
3、整体添加try catch 异常处理
------------------------------------------------------------------------------------------
【创建线程】
1、创建线程,实现implements接口
1.1 私有化socket变量和构造方法
2、重写run方法
2.1 通过socket对象获取流对象,进行数据的通信
2.1.1 从客户端读取信息 输入流
2.1.2 向客户端发送信息 输出流
3、创建while死循环
3.1 阻塞方法,一直读取客户端的连接
3.2 添加死循环的出口
3.3 向客户端发送信息
4、释放资源 整体添加try catch异常处理
------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------
【客户端】
1、创建socket对象,指定链接的服务器ip地址和
2、创建输入输出流对象,进行数据交互
2.1 创建输出流对象
2.1 接收服务端的返回
3、创建while死循环
3.1 等待用户从键盘输入 创建键盘扫描器
3.2 向服务端发送信息
3.3 接收服务端返回的信息
4、释放资源 整体添加try catch接口
【服务端】1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;
public class TestTCPServerDemo {
public static void main(String[] args) {
try {
// 1.创建ServerSocket对象,绑定端口号
ServerSocket ss = new ServerSocket(6666);
// 2.调用accept()方法,等待客户端的连接,获取Socket对象
System.out.println("服务器端已经就绪,等待连接....");
//2.1添加死循环,一直接收客户端的连入请求
while(true){
Socket s = ss.accept();// 一直阻塞状态,一直等待客户端的连接
//2.2创建线程,处理和客户端的通信
ServerThread st = new ServerThread(s);
new Thread(st).start();
}
// ss.close();
} catch (Exception e) {
e.printStackTrace();
} finally {
System.out.println("服务结束,请打分!");
}
}
}
1 | import java.io.BufferedReader; |
【客户端】1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.Socket;
public class TestTCPClientDemo {
public static void main(String[] args) {
try {
// 创建键盘扫描器
BufferedReader br2 = new BufferedReader(new InputStreamReader(System.in));
// 1.创建Socket对象,指定连接的服务器的ip地址和要连接的程序的端口号
Socket s = new Socket("192.168.14.250", 6666);
// 2.通过Socket对象获取流对象,进行数据的交互
// 创建输出流,指向服务器端的程序发送:halo zaima ?
PrintStream ps = new PrintStream(s.getOutputStream());
// 接收服务器返回的信息
BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
while (true) {
System.out.println("请输入您 要发送的内容:");
String sendStr = br2.readLine();// 等待用户从键盘输入
ps.println(sendStr);
System.out.println("数据发送至服务器成功!");
//添加死循环的出口
if("886".equals(sendStr)){
break;
}
String result = br.readLine();
System.out.println("接受到服务器返回的信息:" + result);
}
// 3.关闭Socket释放资源
ps.close();
br.close();
s.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}