`
haoran_10
  • 浏览: 444578 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Socket综合运用 线程池

    博客分类:
  • java
阅读更多

服务器端运用线程缓冲池:

 

package netTest;

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class Server {
	private int port = 5201;// 端口号
	private ServerSocket serverSocket;// 服务器端
	private ExecutorService executorService;// 缓冲池
	private final int pool_size = 4;// 单个CPU缓冲池数目

	public Server() {
		try {
			serverSocket = new ServerSocket(port);
			executorService = Executors.newFixedThreadPool(Runtime.getRuntime()
					.availableProcessors() * pool_size);
			System.out.println("服务器启动");
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	public void service() {
		while (true) {
			Socket socket = null;
			try {
				socket = serverSocket.accept();
				Handler han = new Handler(socket);
				executorService.execute(han);//开启一个线程
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
	
	public static void main(String[] args) {
		new Server().service();
	}
}

 package netTest;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;

public class Handler implements Runnable {
	private Socket socket;

	public Handler(Socket socket) {
		this.socket = socket;
	}

	private PrintWriter getWriter(Socket socket) {
		OutputStream out;
		PrintWriter writer = null;
		try {
			out = socket.getOutputStream();
			writer = new PrintWriter(out);
			return writer;
		} catch (IOException e) {
			e.printStackTrace();
		}
		return writer;
	}

	private BufferedReader getReader(Socket socket) {
		InputStream in;
		BufferedReader reader = null;
		try {
			in = socket.getInputStream();
			reader = new BufferedReader(new InputStreamReader(in));
			return reader;
		} catch (IOException e) {
			e.printStackTrace();
		}
		return null;

	}

	private String echo(String msg) {
		return "echo:" + msg;
	}

	@Override
	public void run() {
		System.out.println("new connection accepted " + socket.getInetAddress()
				+ ":" + socket.getPort());
		BufferedReader reader = getReader(socket);
		PrintWriter writer = getWriter(socket);
		
		String msg = null;
		try {
			while((msg=reader.readLine())!=null){
				System.out.println(msg);
				writer.print(echo(msg));
				if(msg.equals("bye")){
					break;
				}
			}
		} catch (IOException e) {
			e.printStackTrace();
		}finally{
			if(socket!=null){
				try {
					socket.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
	}

}

 package netTest;


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;

public class Client {
private Socket socket;

public Client(String host, int port) {
try {
socket = new Socket(host, port);
System.out.println("连接成功");
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}

private PrintWriter getWriter(Socket socket) {
OutputStream out;
PrintWriter writer = null;
try {
out = socket.getOutputStream();
writer = new PrintWriter(out);
return writer;
} catch (IOException e) {
e.printStackTrace();
}
return writer;
}

private BufferedReader getReader(Socket socket) {
InputStream in;
BufferedReader reader = null;
try {
in = socket.getInputStream();
reader = new BufferedReader(new InputStreamReader(in));
return reader;
} catch (IOException e) {
e.printStackTrace();
}
return null;

}

public void talk() throws IOException {
BufferedReader reader = getReader(socket);
PrintWriter writer = getWriter(socket);

System.out.println("new connection have accepted "
+ socket.getInetAddress() + ":" + socket.getPort());
BufferedReader localReader = new BufferedReader(new InputStreamReader(
System.in));
String msg = "";
while ((msg = localReader.readLine()) != null) {
writer.print(msg);
System.out.println(reader.readLine());
}
socket.close();
}

public static void main(String[] args) throws IOException{
new Client("localhost",5201).talk();
}
}

分享到:
评论

相关推荐

    用Socket编程实现电子邮件的发送

    ### 使用Socket编程实现电子邮件发送的关键知识点 ...总之,通过Socket编程实现电子邮件发送是一个涉及网络通信、数据处理、安全协议等多个方面的复杂任务,需要综合运用多种技术手段和编程技巧来完成。

    C#高性能大容量SOCKET并发

    通过以上技术的综合运用,我们可以构建出一个高效、稳定的大容量Socket并发服务。对于大型在线游戏、实时通讯应用或大数据传输服务来说,这样的解决方案至关重要。学习并掌握这些知识,不仅有助于提升项目的性能,也...

    java socket多线程文件传输实例项目

    总结来说,Java Socket多线程文件传输实例项目是一个综合性的实践,涵盖了网络编程、多线程并发控制以及文件I/O等多个核心Java技术。通过这个项目,开发者可以深入理解如何在实际场景中运用这些技术,解决并发文件...

    Java在线聊天系统.rar

    一、搭建服务器端 a)、创建ServerSocket对象绑定监听端口。...d)、关闭响应资源这个项目非常适合学完Java基础来练手,该项目就是对Socket网络编程、IO流、线程及线程池等知识进行一些实战综合运用。

    java综合面试题

    4. **多线程**:Java的并发编程是面试中的一大难点,涉及线程的创建、同步机制(synchronized、volatile、Lock接口、ReentrantLock等)、线程池(ExecutorService、ThreadPoolExecutor、FutureTask等)、并发容器...

    android 局域网聊天程序

    在Android平台上开发一款局域网聊天程序,主要...综上所述,开发一个Android局域网聊天程序需要综合运用Android应用开发、网络编程和Socket通信技术。理解并掌握这些知识点,才能构建出稳定、高效、安全的聊天应用。

    java Swing聊天室

    总的来说,Java Swing聊天室项目是一个综合运用了Java GUI编程和网络编程技术的实例,通过它,开发者可以深入理解Swing组件的使用以及Socket通信的基本流程,为日后开发更复杂的网络应用打下坚实基础。

    Android扑克网络游戏源码

    总的来说,这份"Android扑克网络游戏源码"是一个涵盖Android客户端开发、Socket网络通信、后端服务器编程以及多线程、数据库操作等多个IT领域的综合案例。无论是初学者还是经验丰富的开发者,都能从中获益,加深对...

    C/S架构五子棋课程设计报告

    通过以上分析,我们可以看到,在C/S架构下开发一个五子棋游戏需要综合运用网络编程、图形界面设计、游戏逻辑处理等多方面的知识。本课程设计不仅加深了学生对于C/S架构和Socket编程的理解,还锻炼了其实现复杂逻辑的...

    孙卫琴 java网络编程详解源代码

    通过孙卫琴的《Java网络编程详解》源代码,读者不仅可以学习到上述技术点,还能看到如何将它们综合运用到实际项目中,从而提升解决实际问题的能力。源代码的实践性使得理论知识更具可操作性,对初学者和有经验的...

    阅后即焚的即时通讯软件.zip

    总的来说,创建一个具备阅后即焚功能的即时通讯软件,需要综合运用Java的Socket网络编程、多线程、数据管理以及可能的安全加密技术。通过合理的架构设计和优化,可以实现稳定、高效且安全的即时通讯系统。

    java编写源代码简易聊天系统

    总的来说,Java编写的简易聊天系统是一个综合运用了网络编程、多线程、输入/输出流、用户界面设计等多个Java核心概念的项目。通过这个系统,开发者可以深入理解Java在网络应用中的实际运用,同时也能提升处理并发和...

    最新java面试题大综合

    4. **并发处理**:Java提供了丰富的并发API,如线程池、synchronized关键字、volatile、ThreadLocal等,理解它们的工作原理和使用场景,是高级Java开发者必备的知识。 5. **JVM内存模型**:面试时可能会涉及垃圾...

    java编写的聊天室

    综上所述,"java编写的聊天室"是一个综合运用了Java GUI设计、网络编程、多线程、对象序列化等技术的项目,它展示了Java在构建实时通信应用方面的强大能力。通过这个项目,开发者可以深入理解Java网络编程的原理,并...

    Java飞鸽源代码局域网

    总的来说,Java飞鸽源代码是一个综合性的学习资源,涵盖了Java网络编程、多线程、数据序列化、事件驱动和文件传输等多个重要知识点。对这些内容的深入理解和实践,将有助于提升开发者在Java应用开发,特别是网络应用...

    高性能Linux网络服务器设计与实现.pdf

    通过以上技术的综合运用,我们可以设计出一款能够满足高性能需求的Linux网络服务器。在实际应用中,这样的服务器能够处理大量用户连接,提供快速的服务响应,提升用户体验,同时降低了运维成本和复杂度。在对比测试...

    Java聊天程序

    Java聊天程序是一种基于Java编程语言实现的实时通讯应用,它允许用户通过网络进行文本、语音甚至视频的交流。...通过这些技术的综合运用,一个完整的Java聊天程序就能被开发出来,为用户提供稳定、安全的在线沟通平台。

    java语言写的聊天室

    总的来说,【JAVA语言写的聊天室】是一个综合运用Java网络编程、TCP协议、多线程和GUI设计等技术的实践项目。它不仅锻炼了开发者在网络通信方面的技能,还涵盖了Java语言的核心特性,对于学习和理解网络编程有着极大...

    java实验报告

    Java支持多线程,实验可能包含线程的创建(Thread类和Runnable接口)、线程同步(synchronized关键字、wait()、notify()方法)以及线程池的概念。学习者需掌握并发编程的基本原理和技巧。 **实验五:系统I/O程序...

    JAVA面试题综合java面试知识

    - Socket编程基础,理解TCP和UDP的区别。 - HTTP协议的基础知识,如GET和POST请求。 9. **反射与注解** - 反射机制的理解,如何通过反射动态访问类、方法和属性。 - 注解的使用和自定义注解。 10. **设计模式*...

Global site tag (gtag.js) - Google Analytics