1、服务端
package sterning;
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 MultiThreadServer {
private int port=8821;
private ServerSocket serverSocket;
private ExecutorService executorService;//线程池
private final int POOL_SIZE=10;//单个CPU线程池大小
public MultiThreadServer() 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 MultiThreadServer().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 accepted "+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();
}
}
}
}
2、客户端
package sterning;
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 MultiThreadClient {
public static void main(String[] args) {
int numTasks = 10;
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();
}
}
};
}
}
从而实现了多个客户端向服务器端发送请求,服务器端采用多线程的方式来处理的情况.再结合我之前的例子---,就可以实现多线程文件的传输了
分享到:
相关推荐
C# Socket 多线程编程实例 C# 是微软随着 VS.net 新推出的语言,它具有 C++ 的强健和 VB 等的 RAD 特性。微软推出 C# 主要是为了对抗 Sun 公司的 Java。C# 在网络编程方面也自然不甘落后于人。这篇文章主要介绍 C# ...
在.NET平台上,SuperSocket以其易于扩展和高度定制化的特性,成为了Socket多线程编程的一个优选方案。 **一、SuperSocket的核心特性** 1. **多线程支持**:SuperSocket采用了多线程模型来处理客户端的连接,确保了...
总的来说,C#的Socket多线程编程结合了网络通信与并发处理的能力,使得开发者可以构建高效、稳定的网络应用。通过理解和掌握相关的同步机制以及Socket工作原理,开发者能够设计出复杂且健壮的网络系统。
Socket多线程编程是网络编程中的一个重要概念,它结合了Socket通信与多线程技术,以提高程序的并发处理能力。在大型系统中,当需要同时处理多个客户端连接请求时,多线程Socket编程就显得尤为关键。下面将详细介绍...
C# Socket多线程编程实例是一个讲解如何使用C#语言结合多线程技术来实现网络通信的具体例子。 C#(读作“看井”)是由微软公司推出的一种面向对象的编程语言,它集成于.NET框架中。C#的设计初衷是为了解决当时Sun...
本资源"**C#_Socket多线程编程实例**"显然是一个专注于讲解如何在C#中利用Socket进行多线程编程的教程。下面将详细阐述C# Socket编程和多线程技术的相关知识点。 ### 1. C# Socket编程基础 Socket,也被称为套接字...
但是基于以上提供的信息,我们可以总结出C#Socket多线程编程的基本要素和实现方式。需要特别注意的是,在实际应用中,要根据具体需求选择合适的线程数量和同步机制,以及处理好异常和错误,确保程序的健壮性和稳定性...
【C# Socket多线程编程实例-聊天程序】 在C#中,Socket编程是一种常见的网络通信方式,尤其在构建聊天程序、文件传输等应用时。本文将深入探讨C#下的Socket多线程编程,以一个聊天程序为例,帮助读者理解和实践相关...
C#中Socket多线程编程实例.pdf
【C中Socket多线程编程实例】 在C编程中,Socket多线程编程是一个关键的领域,特别是在网络通信和服务器开发中。Socket是操作系统提供的一个接口,用于在不同进程间进行网络通信,它是TCP/IP协议栈的核心部分。...
在C#中,Socket多线程编程是网络通信的基础,主要应用于客户端-服务器(C/S)模式的应用场景。Socket接口提供了在不同计算机间交换数据的能力,而多线程技术则可以提升服务端处理并发连接的能力,提高系统的效率。 ...
本文将深入探讨C#中Socket多线程编程的实例,以此来展示如何在C#环境下实现高效的网络通信。 首先,套接字是基于TCP/IP协议族的一种网络通信机制。在Windows平台上,套接字API是Winsock库提供的。而对于C#开发者来...
本文将深入探讨C# Socket多线程编程的相关知识点,通过一个实际的聊天室程序实例来阐述其原理和应用。 首先,我们要了解什么是Socket。Socket是TCP/IP协议族的一部分,它是两台计算机通信的接口,可以视为进程间...
本实例探讨的是如何利用C#进行Socket多线程编程来构建一个聊天程序,这对于理解和掌握网络通信以及并发处理至关重要。 首先,我们要理解Socket编程。Socket是网络通信的基础,它为两台计算机之间的数据交换提供了...
在C#中进行Socket多线程编程是一项重要的技术,它允许程序在后台处理网络通信,同时保持用户界面的响应性。以下是从给定文件内容中提取的关键知识点: 1. **Socket编程基础**: - Socket是网络通信的基础,是进行...
C_中Socket多线程编程实例,能够快速的教你如何在C下做socket编程