Java 多线程 Socket编程示范

Java 多线程 Socket编程示例


1.服务端

Java 多线程 Socket编程示范package sterning;
Java 多线程 Socket编程示范
Java 多线程 Socket编程示范
import java.io.BufferedReader;
Java 多线程 Socket编程示范
import java.io.IOException;
Java 多线程 Socket编程示范
import java.io.InputStream;
Java 多线程 Socket编程示范
import java.io.InputStreamReader;
Java 多线程 Socket编程示范
import java.io.OutputStream;
Java 多线程 Socket编程示范
import java.io.PrintWriter;
Java 多线程 Socket编程示范
import java.net.*;
Java 多线程 Socket编程示范
import java.util.concurrent.*;
Java 多线程 Socket编程示范
Java 多线程 Socket编程示范Java 多线程 Socket编程示范
public class MultiThreadServer Java 多线程 Socket编程示范{
Java 多线程 Socket编程示范    
private int port=8821;
Java 多线程 Socket编程示范    
private ServerSocket serverSocket;
Java 多线程 Socket编程示范    
private ExecutorService executorService;//线程池
Java 多线程 Socket编程示范
    private final int POOL_SIZE=10;//单个CPU线程池大小
Java 多线程 Socket编程示范
    
Java 多线程 Socket编程示范Java 多线程 Socket编程示范    
public MultiThreadServer() throws IOExceptionJava 多线程 Socket编程示范{
Java 多线程 Socket编程示范        serverSocket
=new ServerSocket(port);
Java 多线程 Socket编程示范        
//Runtime的availableProcessor()方法返回当前系统的CPU数目.
Java 多线程 Socket编程示范
        executorService=Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors()*POOL_SIZE);
Java 多线程 Socket编程示范        System.out.println(
"服务器启动");
Java 多线程 Socket编程示范    }

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

Java 多线程 Socket编程示范        }

Java 多线程 Socket编程示范    }

Java 多线程 Socket编程示范    
Java 多线程 Socket编程示范Java 多线程 Socket编程示范    
public static void main(String[] args) throws IOException Java 多线程 Socket编程示范{
Java 多线程 Socket编程示范        
new MultiThreadServer().service();
Java 多线程 Socket编程示范    }

Java 多线程 Socket编程示范
Java 多线程 Socket编程示范}

Java 多线程 Socket编程示范
Java 多线程 Socket编程示范Java 多线程 Socket编程示范
class Handler implements RunnableJava 多线程 Socket编程示范{
Java 多线程 Socket编程示范    
private Socket socket;
Java 多线程 Socket编程示范Java 多线程 Socket编程示范    
public Handler(Socket socket)Java 多线程 Socket编程示范{
Java 多线程 Socket编程示范        
this.socket=socket;
Java 多线程 Socket编程示范    }

Java 多线程 Socket编程示范Java 多线程 Socket编程示范    
private PrintWriter getWriter(Socket socket) throws IOExceptionJava 多线程 Socket编程示范{
Java 多线程 Socket编程示范        OutputStream socketOut
=socket.getOutputStream();
Java 多线程 Socket编程示范        
return new PrintWriter(socketOut,true);
Java 多线程 Socket编程示范    }

Java 多线程 Socket编程示范Java 多线程 Socket编程示范    
private BufferedReader getReader(Socket socket) throws IOExceptionJava 多线程 Socket编程示范{
Java 多线程 Socket编程示范        InputStream socketIn
=socket.getInputStream();
Java 多线程 Socket编程示范        
return new BufferedReader(new InputStreamReader(socketIn));
Java 多线程 Socket编程示范    }

Java 多线程 Socket编程示范Java 多线程 Socket编程示范    
public String echo(String msg)Java 多线程 Socket编程示范{
Java 多线程 Socket编程示范        
return "echo:"+msg;
Java 多线程 Socket编程示范    }

Java 多线程 Socket编程示范Java 多线程 Socket编程示范    
public void run()Java 多线程 Socket编程示范{
Java 多线程 Socket编程示范Java 多线程 Socket编程示范        
try Java 多线程 Socket编程示范{
Java 多线程 Socket编程示范            System.out.println(
"New connection accepted "+socket.getInetAddress()+":"+socket.getPort());
Java 多线程 Socket编程示范            BufferedReader br
=getReader(socket);
Java 多线程 Socket编程示范            PrintWriter pw
=getWriter(socket);
Java 多线程 Socket编程示范            String msg
=null;
Java 多线程 Socket编程示范Java 多线程 Socket编程示范            
while((msg=br.readLine())!=null)Java 多线程 Socket编程示范{
Java 多线程 Socket编程示范                System.out.println(msg);
Java 多线程 Socket编程示范                pw.println(echo(msg));
Java 多线程 Socket编程示范                
if(msg.equals("bye"))
Java 多线程 Socket编程示范                    
break;
Java 多线程 Socket编程示范            }

Java 多线程 Socket编程示范Java 多线程 Socket编程示范        }
 catch (IOException e) Java 多线程 Socket编程示范{
Java 多线程 Socket编程示范            e.printStackTrace();
Java 多线程 Socket编程示范Java 多线程 Socket编程示范        }
finallyJava 多线程 Socket编程示范{
Java 多线程 Socket编程示范Java 多线程 Socket编程示范            
try Java 多线程 Socket编程示范{
Java 多线程 Socket编程示范                
if(socket!=null)
Java 多线程 Socket编程示范                    socket.close();
Java 多线程 Socket编程示范Java 多线程 Socket编程示范            }
 catch (IOException e) Java 多线程 Socket编程示范{
Java 多线程 Socket编程示范                e.printStackTrace();
Java 多线程 Socket编程示范            }

Java 多线程 Socket编程示范        }

Java 多线程 Socket编程示范    }

Java 多线程 Socket编程示范}


2.客户端

Java 多线程 Socket编程示范package sterning;
Java 多线程 Socket编程示范
Java 多线程 Socket编程示范
import java.io.BufferedReader;
Java 多线程 Socket编程示范
import java.io.IOException;
Java 多线程 Socket编程示范
import java.io.InputStreamReader;
Java 多线程 Socket编程示范
import java.io.OutputStream;
Java 多线程 Socket编程示范
import java.net.Socket;
Java 多线程 Socket编程示范
import java.util.concurrent.ExecutorService;
Java 多线程 Socket编程示范
import java.util.concurrent.Executors;
Java 多线程 Socket编程示范
Java 多线程 Socket编程示范Java 多线程 Socket编程示范
public class MultiThreadClient Java 多线程 Socket编程示范{
Java 多线程 Socket编程示范    
Java 多线程 Socket编程示范Java 多线程 Socket编程示范    
public static void main(String[] args) Java 多线程 Socket编程示范{
Java 多线程 Socket编程示范        
int numTasks = 10;
Java 多线程 Socket编程示范        
Java 多线程 Socket编程示范        ExecutorService exec 
= Executors.newCachedThreadPool();
Java 多线程 Socket编程示范
Java 多线程 Socket编程示范Java 多线程 Socket编程示范        
for (int i = 0; i < numTasks; i++Java 多线程 Socket编程示范{
Java 多线程 Socket编程示范            exec.execute(createTask(i));
Java 多线程 Socket编程示范        }

Java 多线程 Socket编程示范
Java 多线程 Socket编程示范    }

Java 多线程 Socket编程示范
Java 多线程 Socket编程示范    
// 定义一个简单的任务
Java 多线程 Socket编程示范Java 多线程 Socket编程示范
    private static Runnable createTask(final int taskID) Java 多线程 Socket编程示范{
Java 多线程 Socket编程示范Java 多线程 Socket编程示范        
return new Runnable() Java 多线程 Socket编程示范{
Java 多线程 Socket编程示范            
private Socket socket = null;
Java 多线程 Socket编程示范            
private int port=8821;
Java 多线程 Socket编程示范
Java 多线程 Socket编程示范Java 多线程 Socket编程示范            
public void run() Java 多线程 Socket编程示范{
Java 多线程 Socket编程示范                System.out.println(
"Task " + taskID + ":start");
Java 多线程 Socket编程示范Java 多线程 Socket编程示范                
try Java 多线程 Socket编程示范{                    
Java 多线程 Socket编程示范                    socket 
= new Socket("localhost", port);
Java 多线程 Socket编程示范                    
// 发送关闭命令
Java 多线程 Socket编程示范
                    OutputStream socketOut = socket.getOutputStream();
Java 多线程 Socket编程示范                    socketOut.write(
"shutdown\r\n".getBytes());
Java 多线程 Socket编程示范
Java 多线程 Socket编程示范                    
// 接收服务器的反馈
Java 多线程 Socket编程示范
                    BufferedReader br = new BufferedReader(
Java 多线程 Socket编程示范                            
new InputStreamReader(socket.getInputStream()));
Java 多线程 Socket编程示范                    String msg 
= null;
Java 多线程 Socket编程示范                    
while ((msg = br.readLine()) != null)
Java 多线程 Socket编程示范                        System.out.println(msg);
Java 多线程 Socket编程示范Java 多线程 Socket编程示范                }
 catch (IOException e) Java 多线程 Socket编程示范{                    
Java 多线程 Socket编程示范                    e.printStackTrace();
Java 多线程 Socket编程示范                }

Java 多线程 Socket编程示范            }

Java 多线程 Socket编程示范
Java 多线程 Socket编程示范        }
;
Java 多线程 Socket编程示范    }

Java 多线程 Socket编程示范}

Java 多线程 Socket编程示范


从而实现了多个客户端向服务器端发送请求,服务器端采用多线程的方式来处理的情况.再结合我之前的例子---Java基于Socket文件传输示例,就可以实现多线程文件的传输了