`

Java 多线程 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();
                }

            }


        }
;
    }

}


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

3
0
分享到:
评论

相关推荐

    Java多线程-Socket编程

    Java 多线程-Socket 编程是指在 Java 语言中使用多线程技术来实现网络编程,特别是使用 Socket 编程来实现客户端和服务器端的通信。在 Java 中,多线程可以使用 Thread 类和 Runnable 接口来实现,而 Socket 编程则...

    多线程Java_Socket编程示例

    本文介绍了一个基于Java的多线程Socket编程示例,通过对服务端实现的分析,我们可以了解到如何利用Java的多线程技术和Socket通信来构建高性能的网络应用程序。这种编程方式特别适合处理大量的并发连接,是构建实时...

    多线程Java Socket编程示例.doc

    多线程Java Socket编程示例展示了如何在服务器端利用线程池处理多个并发客户端请求。在这个例子中,`sterning.MultiThreadServer` 类创建了一个监听特定端口(默认为8821)的服务器,并使用`ExecutorService`来管理...

    学习笔记:多线程Java Socket编程示例

    总结来说,这个学习笔记提供了一个使用Java Socket编程实现多线程服务器的示例,它演示了如何利用ExecutorService创建线程池来处理并发连接,是理解Java并发编程和网络通信的一个实用案例。虽然这是一个学习笔记,但...

    Java TCP IP Socket编程(原书第2版)

    书中提供了多个实用的案例,如简单的聊天室应用、文件传输服务等,这些案例不仅展示了Socket编程的基本原理,也涵盖了多线程、非阻塞I/O和安全通信等高级主题。通过动手实践,读者可以将理论知识转化为实际技能,更...

    java多线程Socket简单实现

    Java多线程Socket实现是网络编程中的重要概念,它结合了Java的并发处理能力和Socket通信技术,用于构建高效、可扩展的网络应用。Socket在计算机网络中起到桥梁的作用,允许两个远程应用程序通过TCP/IP进行数据交换。...

    Java源码:Socket编程.rar_java socket _java编程_socket java_socket编程 jav

    本资料包含的"Java源码:Socket编程"是一个示例,旨在帮助开发者理解并掌握Java中的Socket编程技术。 首先,Socket编程涉及的主要类有`ServerSocket`和`Socket`。`ServerSocket`类用于创建服务器端的监听套接字,它...

    java socket编程示例

    综上所述,这个Java Socket编程示例可能会展示如何创建一个简单的客户端和服务器应用程序,同时结合了用户友好的界面。通过阅读和理解示例代码,你可以学习到Java网络编程的基础,包括建立连接、交换数据和管理资源...

    Java socket网络编程的基础示例

    在实际应用中,Java Socket编程通常涉及异常处理、多线程以及数据的序列化与反序列化。例如,服务器端可能需要同时处理多个客户端连接,这时可以使用多线程来并发处理。客户端和服务器之间的数据交换可以采用JSON、...

    多线程JavaSocket编程示例.pdf

    综上所述,文件内容展示了一个典型的多线程Socket服务器端应用,如何通过多线程来处理多个客户端的并发请求,以及如何使用Java中的I/O流进行数据的读写操作,同时包含了网络编程和多线程处理的关键知识点。

    java socket 多线程通讯示例

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

    flex的socket客户端连接java多线程socket服务端demo

    在实际的`flex的socket客户端连接java多线程socket服务端demo`中,客户端可能包含以下步骤: 1. 初始化`Socket`对象,指定服务器的IP地址和端口号。 2. 使用`Socket.connect()`方法建立到服务器的连接。 3. 通过`...

    Java面试之Socket编程

    Java网络编程是开发分布式应用程序的关键技术之一,其中Socket编程扮演着至关重要的角色。在Java面试中,对Socket编程的理解和应用能力通常是评估开发者技能的重要标准。以下是对Socket编程的详细阐述: 1. **Java ...

    Java Socket编程实现的简单多线程WEB服务器

    Java Socket 编程实现的简单多线程 WEB 服务器 在本文中,我们将详细介绍如何使用 Java 的 Socket 编程实现一个简单的多线程 WEB 服务器。 Socket 编程简介 Socket 编程是 Java 网络编程的基础,它允许开发者创建...

    Java_socket 通信示例(Java源码)

    Java Socket通信是网络编程中的基础概念,主要用于两个应用程序之间的双向通信。在这个"Java_socket 通信示例"中,我们看到的是一个简单的聊天室应用,它利用了Java的Socket API来实现实时的数据交换。以下是对这个...

    Java多线程技术及其在网络编程中的应用.pdf

    ### Java多线程技术及其在网络编程中的应用 #### 引言 Java作为一种强大的面向对象的编程语言,由SUN公司开发,旨在支持分布式计算。它不仅具备简单的语法、面向对象的特点,还拥有跨平台的特性、高可靠性和安全性...

    多线程socket编程[参照].pdf

    在多线程Socket编程中,Java提供了一种高效且灵活的方式来处理并发网络通信。这个话题主要涉及以下几个核心概念和技术: 1. **Java Socket编程**:Socket是网络编程的基础,它代表了两个网络节点间的通信链路。在...

    Socket编程示例(JAVA)

    Socket编程是计算机网络编程中的重要组成部分,特别是在Java中,它为开发者提供了在不同网络设备间交换数据的能力。本文将深入探讨Linux环境下使用Java进行Socket编程的相关知识点。 首先,Socket是网络通信中的一...

    java socket编程

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

    Java_Socket编程示例整理.pdf

    总的来说,Java Socket编程涉及到网络通信的基本模型、端口的使用、数据的读写以及多线程处理等核心概念。通过`ServerSocket`和`Socket`类,开发者可以构建出能够处理多个客户端请求的服务器,以及与之交互的客户端...

Global site tag (gtag.js) - Google Analytics