`
beat_it_
  • 浏览: 63911 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java socket 多线程

    博客分类:
  • java
阅读更多

http://www.blogjava.net/sterning/archive/2007/10/15/152940.html摘了篇java socket thread 的文章:

服务端:

package com.lyq.socket.server;

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.*;
import java.util.concurrent.*;

//服务端
public class SocketServer {

	private int port = 8821;
	private ServerSocket serverSocket;
	private ExecutorService executorService;// 线程池
	private final int POOL_SIZE = 10;// 单个CPU 线程池大小

	public SocketServer() throws IOException {
		serverSocket = new ServerSocket(port);
		// Runtime 的availableProcessor()方法返 回当前系统的CPU数目.
		executorService = Executors.newFixedThreadPool(Runtime.getRuntime()
				.availableProcessors() * POOL_SIZE);
		System.out.println(" 服务器启动");
	}

	public void service() {
		while (true) {
			Socket socket = null;
			try {
				// 接收客户连接,只要客户进行了连 接,就会触发accept();从而建立连接
				socket = serverSocket.accept();
				executorService.execute(new Handler(socket));
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}

	public static void main(String[] args) throws IOException {
		new SocketServer().service();
	}

}

class Handler implements Runnable {
	private Socket socket;

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

	private PrintWriter getWriter(Socket socket) throws IOException {
		OutputStream socketOut = socket.getOutputStream();
		return new PrintWriter(socketOut, true);
	}

	private BufferedReader getReader(Socket socket) throws IOException {
		InputStream socketIn = socket.getInputStream();
		return new BufferedReader(new InputStreamReader(socketIn));
	}

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

	public void run() {
		try {
			System.out.println("New connection a ccepted "
					+ socket.getInetAddress() + ":" + socket.getPort());
			BufferedReader br = getReader(socket);
			PrintWriter pw = getWriter(socket);
			String msg = null;
			while ((msg = br.readLine()) != null) {
				System.out.println(msg);
				pw.println(echo(msg));
				if (msg.equals("bye"))
					break;
			}
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				if (socket != null)
					socket.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
}

 

客户端代码如下:

package com.lyq.socket.client;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.Socket;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

//客户端
public class SocketClient {

	public static void main(String[] args) {
		int numTasks = 110;
		ExecutorService exec = Executors.newCachedThreadPool();
		for (int i = 0; i < numTasks; i++) {
			exec.execute(createTask(i));
		}
	}

	// 定义一个简单的任务
	private static Runnable createTask(final int taskID) {
		return new Runnable() {
			private Socket socket = null;
			private int port = 8821;

			public void run() {
				System.out.println("Task " + taskID + ":start");
				try {
					socket = new Socket("localhost", port);
					// 发送关闭命令
					OutputStream socketOut = socket.getOutputStream();
					socketOut.write("shutdown\r\n".getBytes());
					// 接收服务器的反馈
					BufferedReader br = new BufferedReader(
							new InputStreamReader(socket.getInputStream()));
					String msg = null;
					while ((msg = br.readLine()) != null)
						System.out.println(msg);
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		};
	}
}

 

 

采用Java 5的ExecutorService来进行线程池的方式实现多线程,模拟客户端多用户向同一服务器端发送请求.

从而实现了多个客户端向服务器端发送请求,服务器端采用多线程的方式来处理的情况.

分享到:
评论

相关推荐

    java Socket 多线程

    总结来说,Java Socket多线程是构建高并发网络服务的关键技术。通过合理地设计和实现,可以有效地提升服务器的并发处理能力,为用户提供更高效的服务。在实际项目中,应根据具体需求选择适合的线程模型,例如线程池...

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

    Java Socket多线程文件传输实例项目是一个典型的网络编程应用场景,主要涉及了Socket编程、多线程处理以及文件I/O操作等关键知识点。在这个项目中,开发者利用Java的Socket API实现了一个能够支持多个客户端同时进行...

    java socket 多线程实例

    在这个“Java Socket 多线程实例”中,我们将会探讨如何结合这两个关键概念来创建一个聊天服务器和客户端应用。 首先,`ChatServer.java` 文件通常包含了服务器端的代码。在Java中,通过`java.net.ServerSocket` 类...

    java socket 多线程 简易实现

    Java Socket多线程简易实现是网络编程中的一个基础概念,主要应用于客户端与服务器之间的通信。在Java中,Socket是基于TCP协议的,提供了一种可靠的、面向连接的字节流通信方式。多线程则是Java并发编程的重要特性,...

    java socket多线程聊天

    Java Socket多线程聊天软件是基于Java编程语言构建的一个网络通信应用,主要利用Socket API来实现客户端与服务器之间的实时通信。在这个系统中,服务器端能够同时处理多个客户端连接,这得益于Java的多线程特性。SWT...

    java socket 多线程并发控制 hibernate mysql

    本项目聚焦于使用Java的Socket进行多线程并发控制,并结合Hibernate ORM框架与MySQL数据库进行数据存储。下面将详细阐述这些技术及其应用。 首先,Java Socket是Java提供的用于实现网络上不同计算机间进程通信的...

    java socket 多线程通讯示例

    总的来说,Java Socket多线程通信是一种强大的工具,用于构建分布式系统和网络应用。理解如何创建和管理Socket连接,以及如何在多线程环境下处理这些连接,是成为熟练的Java网络程序员的关键步骤。通过实践和理解...

    java socket多线程多人聊天室

    本项目"java socket多线程多人聊天室"旨在利用Java的Socket API创建一个支持多个客户端同时连接的聊天环境。在这个项目中,主要涉及三个关键组件:Server(服务器)、Client(客户端)和User(用户)。 首先,`...

    java socket多线程文件上传下载实例项目

    Java Socket多线程文件上传下载实例项目是一种基于Java网络编程技术实现的,旨在处理大量并发连接的文件传输服务。在本项目中,Socket是客户端与服务器之间通信的基础,它允许两个应用程序通过网络交换数据。多线程...

    Java Socket多线程实例及文档

    本文将深入探讨Java Socket多线程的应用,并通过实例解析其工作原理。 一、Java Socket基础 Java Socket类代表了TCP协议中的一个连接,Socket对象由服务器端的ServerSocket监听并接受客户端的连接请求后创建。...

    java socket 多线程图片模拟视频

    Java Socket多线程图片模拟视频是一种利用编程技术模拟视频播放的方法。在这个项目中,通过Java Socket通信和多线程技术,将连续的图片快速切换,从而达到类似视频流畅播放的效果。这种技术通常用于网络传输环境,...

    java Socket多线程通讯实例

    总结起来,Java Socket多线程通讯实例展示了如何利用Java的网络编程API实现TCP通信,并通过多线程处理并发连接,这在构建例如QQ这样的聊天应用时是非常重要的技术。通过这种方式,服务端能够有效地管理大量并发的...

    Java Socket 多线程通信

    Java Socket 多线程通信是网络编程中的一个重要概念,它涉及到Java的基础网络API以及多线程技术。在Java中,Socket是实现客户端-服务器通信的基础,而多线程则允许程序同时处理多个任务,这对于构建能够同时服务多个...

    java socket 多线程网络传输多个文件

    java socket 多线程网络传输多个文件

    网络通信之Java Socket多线程通信.pdf

    Java Socket 多线程通信技术 Java Socket 通信技术是网络通信的关键技术之一。通过实现一个简单的服务端、客户端聊天程序,文章对 Java Socket 通信技术的原理和实现进行了详细的介绍。 网络通信设计 网络通信...

    Java Socket 多线程实现文件传输

    Java Socket 多线程实现文件传输是一个常见的网络编程...通过以上介绍,你应该对Java Socket多线程实现文件传输有了基本的理解。实际开发中,还需要根据具体需求进行调整和优化,例如添加进度显示、文件校验等功能。

    java socket多线程通信案例

    基于多线程实现的JavaSocket客户端-服务端点对点异步通信程序代码

    java socket通讯例程 多线程读写 可以同时收发不同终端的消息

    在主线程中通过控制台读取键盘...服务器在收到一个socket连接之后,把该socket保存到队列中,并对队列中的每个socket开启各自的读写线程。测试可以在不同控制台运行server和client,服务器接收消息时,会显示消息来源

    java socket多线程处理框架SocketServer

    客户端的请求首先会进入请求队列,处理器线程池会向请求队列获取请求并且分配分配处理器,每个处理器分配一个线程。处理器可以指定interceptor,处理逻辑都实现在ResponseHandler中。空闲时,处理器线程会休眠直到有...

Global site tag (gtag.js) - Google Analytics