📄 multithreadclientsocketdemo.java
字号:
//【例11-8】 基于多线程的客户端程序。
//程序清单11-8: MultithreadClientSocketDemo.java
package socket;
import java.net.*;
import java.io.*;
public class MultithreadClientSocketDemo {// 主类
static final int MAXTHREADS = 10;// 客户端最多线程数
public static void main(String[] args) {
try {// 获取Localhost地址
InetAddress ClientIP = InetAddress.getByName(null);
System.out.println("ClientIP: " + ClientIP);
while (true) {// 客户端总的线程数不超过“MAXTHREADS”
if (MultithreadClientSocket.getTcount() < MAXTHREADS)
new MultithreadClientSocket(ClientIP);
Thread.sleep(100);
}
} catch (InterruptedException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
class MultithreadClientSocket extends Thread {
private Socket socket = null;// 客户端Socket类的对象引用socket
private BufferedReader in;// 客户端输入流
private PrintWriter out;// 客户端输出流
private static int count = 0;
private int tid = count++;
private static int tcount = 0;// 客户端的总线程计数器
public static int getTcount() {// 求当前总线程数
return tcount;
}
public MultithreadClientSocket(InetAddress Clientip) {// 定义多线程类
System.out.println("\n创建客户端线程:" + tid);
tcount++;// 总线程数增1
try {// 创建客户端Socket类的对象socket,服务器地址取本地,端口号为55558
socket = new Socket(Clientip, MultithreadServerSocketDemo.PORT);
// 输出客户端套接字信息
System.out.println("socket = " + socket);
// 创建并包装客户端socket对象的输入流
in = new BufferedReader(new InputStreamReader(socket
.getInputStream()));
// 创建并包装客户端socket对象的输出流
out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(
socket.getOutputStream())), true);
start();// 启动线程
} catch (IOException e1) {
e1.printStackTrace();
try {// 关闭连接,释放网络资源
in.close();
out.close();
socket.close();
} catch (IOException e2) {
e2.printStackTrace();
}
System.out.println("客户端线程正常关闭连接!");
}
}
public void run() {// 线程体
try {
for (int i = 1; i <= 5; i++) {
// 向服务器端输出数据
out.println("From Client Thread " + tid + ": " + i);
System.out.println(in.readLine());// 从服务器端读入数据
}
out.println("结束");
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
tcount--;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -