`

Socket 多线程编程

    博客分类:
  • Java
阅读更多

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多线程编程实例[收集].pdf

    C# Socket 多线程编程实例 C# 是微软随着 VS.net 新推出的语言,它具有 C++ 的强健和 VB 等的 RAD 特性。微软推出 C# 主要是为了对抗 Sun 公司的 Java。C# 在网络编程方面也自然不甘落后于人。这篇文章主要介绍 C# ...

    c#超级Socket库SuperSocket,SOCKET多线程编程

    在.NET平台上,SuperSocket以其易于扩展和高度定制化的特性,成为了Socket多线程编程的一个优选方案。 **一、SuperSocket的核心特性** 1. **多线程支持**:SuperSocket采用了多线程模型来处理客户端的连接,确保了...

    C# socket多线程编程

    总的来说,C#的Socket多线程编程结合了网络通信与并发处理的能力,使得开发者可以构建高效、稳定的网络应用。通过理解和掌握相关的同步机制以及Socket工作原理,开发者能够设计出复杂且健壮的网络系统。

    socket 多线程编程.rar .

    Socket多线程编程是网络编程中的一个重要概念,它结合了Socket通信与多线程技术,以提高程序的并发处理能力。在大型系统中,当需要同时处理多个客户端连接请求时,多线程Socket编程就显得尤为关键。下面将详细介绍...

    C#Socket多线程编程实例

    C# Socket多线程编程实例是一个讲解如何使用C#语言结合多线程技术来实现网络通信的具体例子。 C#(读作“看井”)是由微软公司推出的一种面向对象的编程语言,它集成于.NET框架中。C#的设计初衷是为了解决当时Sun...

    C#_Socket多线程编程实例

    本资源"**C#_Socket多线程编程实例**"显然是一个专注于讲解如何在C#中利用Socket进行多线程编程的教程。下面将详细阐述C# Socket编程和多线程技术的相关知识点。 ### 1. C# Socket编程基础 Socket,也被称为套接字...

    C#Socket多线程编程实例.pdf

    但是基于以上提供的信息,我们可以总结出C#Socket多线程编程的基本要素和实现方式。需要特别注意的是,在实际应用中,要根据具体需求选择合适的线程数量和同步机制,以及处理好异常和错误,确保程序的健壮性和稳定性...

    C# Socket多线程编程实例-聊天程序

    【C# Socket多线程编程实例-聊天程序】 在C#中,Socket编程是一种常见的网络通信方式,尤其在构建聊天程序、文件传输等应用时。本文将深入探讨C#下的Socket多线程编程,以一个聊天程序为例,帮助读者理解和实践相关...

    C#中Socket多线程编程实例

    C#中Socket多线程编程实例.pdf

    C中Socket多线程编程实例.pdf

    【C中Socket多线程编程实例】 在C编程中,Socket多线程编程是一个关键的领域,特别是在网络通信和服务器开发中。Socket是操作系统提供的一个接口,用于在不同进程间进行网络通信,它是TCP/IP协议栈的核心部分。...

    C# Socket多线程编程开发

    在C#中,Socket多线程编程是网络通信的基础,主要应用于客户端-服务器(C/S)模式的应用场景。Socket接口提供了在不同计算机间交换数据的能力,而多线程技术则可以提升服务端处理并发连接的能力,提高系统的效率。 ...

    C# Socket多线程编程实例

    本文将深入探讨C#中Socket多线程编程的实例,以此来展示如何在C#环境下实现高效的网络通信。 首先,套接字是基于TCP/IP协议族的一种网络通信机制。在Windows平台上,套接字API是Winsock库提供的。而对于C#开发者来...

    C__Socket多线程编程实例[1].pdf

    本文将深入探讨C# Socket多线程编程的相关知识点,通过一个实际的聊天室程序实例来阐述其原理和应用。 首先,我们要了解什么是Socket。Socket是TCP/IP协议族的一部分,它是两台计算机通信的接口,可以视为进程间...

    C__Socket多线程编程实例-聊天程序).docx.zip_C#_pinepz9_socket_多线程实例_软件工程设计

    本实例探讨的是如何利用C#进行Socket多线程编程来构建一个聊天程序,这对于理解和掌握网络通信以及并发处理至关重要。 首先,我们要理解Socket编程。Socket是网络通信的基础,它为两台计算机之间的数据交换提供了...

    C#中Socket多线程编程实例.pdf

    在C#中进行Socket多线程编程是一项重要的技术,它允许程序在后台处理网络通信,同时保持用户界面的响应性。以下是从给定文件内容中提取的关键知识点: 1. **Socket编程基础**: - Socket是网络通信的基础,是进行...

    C_中Socket多线程编程实例

    C_中Socket多线程编程实例,能够快速的教你如何在C下做socket编程

Global site tag (gtag.js) - Google Analytics