`

Java Socket Server-client端多线程处理代码示例

 
阅读更多

java socket服务端

package cn.outofmemory.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 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();
            }
        }
    }
}

 java socket客户端代码

package cn.outofmemory.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 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();
                }
            }

        };
    }
}

 

分享到:
评论

相关推荐

    java tcp server 创建线程监听端口,创建线程处理连接

    在Java编程中,TCP(传输控制协议)服务器的构建通常涉及到多线程技术,以便能够同时处理多个客户端的连接请求。下面将详细讲解如何利用Java创建一个TCP服务器,使用线程来监听端口并处理连接。 一、TCP服务器基础 ...

    java socket 多线程 简易实现

    下面是一个简单的Java Socket多线程示例: ```java // 服务器端 public class Server { public static void main(String[] args) throws IOException { ServerSocket serverSocket = new ServerSocket(8080); ...

    java_Socket多线程服务器源代码介绍

    ### Java Socket多线程服务器源代码介绍 #### 一、Java Socket基础知识 在开始之前,我们先了解一下Java Socket的基本概念。Socket是一种用于网络通信的技术,它允许不同计算机上的应用程序通过网络进行通信。Java...

    java socket 多线程通讯示例

    Java Socket 多线程通信是网络编程中的一个重要概念,它允许两个或多个应用程序通过TCP/IP进行数据交换。在这个示例中,我们创建了一个双向通信的系统,即双工通信,这意味着数据可以在两个方向上同时传输。这样的...

    android--simple-Server-and-Client.rar_Server_android_android cli

    - 这可能包含一个简单的Android服务器实现的源代码文件,可能有如MainActivity.java(主应用程序入口)、ServerThread.java(处理客户端连接的线程)等文件,以及必要的布局XML文件和配置文件。 5. **实际应用**:...

    Java 在Client-Server 网络中的应用

    Java的特点,如跨平台性、面向对象的设计理念、分布式计算能力、多线程支持以及强大的安全机制等,使其在Client-Server网络环境中具有显著优势。 ### 客户机/服务器模型概述 在传统的客户机/服务器(Client/Server,...

    java-comm-server-client-multithread

    总结来说,"java-comm-server-client-multithread"项目是一个Java实现的多线程服务器-客户端通信示例,它展示了如何使用Java的网络编程API和多线程技术来处理并发连接。这样的系统对于理解网络通信、并发处理和线程...

    Java Socket 多线程通信

    在Java中,Socket是实现客户端-服务器通信的基础,而多线程则允许程序同时处理多个任务,这对于构建能够同时服务多个客户端的服务器来说至关重要。 1. **Java Socket基础** Java Socket是TCP/IP协议的应用层接口,...

    Java Socket多线程实例及文档

    以下是一个简单的Java Socket多线程服务器示例: ```java import java.io.*; import java.net.*; public class MultiThreadedServer { public static void main(String[] args) throws IOException { ...

    Java Socket实现多线程通信功能示例

    在 Java 中,使用 Socket 来实现多线程通信需要解决两个问题:一是服务器端如何处理多个客户端的请求,二是客户端如何与服务器端进行通信。 服务器端实现多线程通信 在服务器端,使用 ServerSocket 来监听客户端的...

    JAVA socket收发数据,并支持断网自动连接

    因此,可以考虑使用多线程处理多个并发的客户端连接。 - 对于客户端,可以在单独的线程中执行收发数据操作,以免阻塞主线程。 7. **关闭资源** - 在通信结束后,确保正确关闭Socket、输入/输出流,避免资源泄漏。...

    安卓Java Web Socket简单使用

    在Android平台上,Java Web Socket是一种实现双向通信的协议,它允许服务器和客户端实时交换数据,非常适合...在`java-web-socket-master`这个项目中,你可以找到更多关于WebSocket客户端实现的示例代码和详细解释。

    server_client通信程序

    综上所述,"server_client通信程序"涵盖了网络通信的基础知识,包括Socket编程、TCP/IP协议、服务器和客户端的角色、数据传输以及异常处理等重要概念。通过本地实验,我们可以更好地理解和调试这类程序,确保其在...

    Client-Server-App.zip_between_client

    为了优化服务器性能,服务器端可能采用了多线程或异步I/O模型(如Java NIO)来处理多个客户端请求,以提高并发处理能力。 综上所述,这个压缩包提供的代码示例涉及了客户端-服务器应用开发的基础,包括TCP/IP通信...

    java socket编程

    在本文中,我们将深入探讨Java Socket编程的关键概念、工作原理以及如何创建服务端和客户端,并讨论如何通过多线程支持多个客户端同时在线。 首先,Socket是网络上的两个进程间通信的端点,它允许数据在网络中双向...

    三步学会Java Socket编程

    ### 三步学会Java Socket编程 #### 一、理解Socket概念与原理 ##### 1.1 套接字(Socket)...值得注意的是,实际开发过程中还需要考虑更多的细节问题,比如错误处理、多线程支持等,这些将在后续的文章中进一步探讨。

    Java Socket Programming

    - **Server.java**:此代码示例中,服务器监听8000端口,接受连接请求,并向客户端发送一条消息:“Message from the server”。服务器端主要使用DataOutputStream向客户端输出数据,并通过DataInputStream接收...

    socket多线程通信源码

    "serverandclient.txt"可能是一个简单的服务器和客户端程序的示例,展示了如何使用Java等编程语言实现Socket多线程通信。 在实际开发中,需要注意的是,多线程通信会带来同步和互斥的问题,需要使用适当的锁机制...

    JAVA-socket开发指南

    服务器端多线程示例** ```java import java.io.*; import java.net.*; public class MultiThreadedServer { public static void main(String[] args) throws IOException { ServerSocket serverSocket = new ...

Global site tag (gtag.js) - Google Analytics