/**服务端**/
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;
public class ThreadServer extends Thread {
private Socket server;
private BufferedReader reader;
private PrintWriter writer;
public ThreadServer(Socket socket) throws IOException {
server = socket;
reader = new BufferedReader(new InputStreamReader(
server.getInputStream()));//创建输入流
writer = new PrintWriter(new OutputStreamWriter(
server.getOutputStream()));//创建输出流
start();
}
public void run() {
try {
while (true) {
String str = reader.readLine();//读取客户端传来的请求
if (str.equals("END"))
break;
System.out.println("Echoing:" + str);
writer.println(str);//打印请求信息
}
} catch (IOException e) {
} finally {
try {
server.close();
} catch (IOException e) {
}
}
}
/**main启动服务器**/
static final int PORT = 8080;
public static void main(String[] args) throws IOException{
ServerSocket server = new ServerSocket(PORT);//启动服务器
System.out.println("Server Started:" + server);
try{
while(true){
Socket socket = server.accept();//进入阻塞状态准备接收数据
try {
new ThreadServer(socket);//创建服务线程
} catch (IOException e) {
socket.close();
}
}
}finally{
server.close();
}
}
}
/**客户端**/
package com.net;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.Socket;
public class ThreadClient extends Thread {
private Socket client;//客户端套接字(浏览器等等)
private BufferedReader reader;//输入流
private PrintWriter writer;//输出流
private static int counter = 0;//请求数量
private int id = counter++;//请求id
private static int threadcount = 0;//线程数量
public static int getThreadCount() {
return threadcount;
}
public ThreadClient(InetAddress address){
System.out.println("Making client" + id);
threadcount ++;
try{
client = new Socket(address,MultiJobServer.PORT);//发送请求到指定地址+端口
}catch (IOException e) {
}
try {
reader = new BufferedReader(new InputStreamReader(client.getInputStream()));//初始化输入流
writer = new PrintWriter(new OutputStreamWriter(client.getOutputStream()),true);//初始化输出流
start();//开始线程
} catch (IOException e) {
try {
client.close();
} catch (IOException e2) {
}
}
}
public void run(){
try {
for(int i = 0 ; i < 25 ; i ++){
writer.println("Client " + id + ":" + i);//发送请求信息
String str = reader.readLine();//接收返回的信息
System.out.println(str);//打印返回数据
}
writer.println("END");
} catch (Exception e) {
}finally{
try {
client.close();
} catch (IOException e) {
}
threadcount --;
}
}
static final int MAX_THREADS = 4000;//最大线程数
@SuppressWarnings("static-access")
public static void main(String[] args) throws UnknownHostException, InterruptedException {
InetAddress address = InetAddress.getByName(null);//得到本机地址
while(true){
if(ThreadClient.getThreadCount() < MAX_THREADS){
new ThreadClient(address);//发送请求
Thread.currentThread().sleep(100);//休眠100毫秒后继续请求
}
}
}
}
多线程Socket实用例子
最新推荐文章于 2025-04-13 19:27:54 发布