⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 multithreadclientsocketdemo.java

📁 java程序设计教程的源码
💻 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 + -