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(传输控制协议)服务器的构建通常涉及到多线程技术,以便能够同时处理多个客户端的连接请求。下面将详细讲解如何利用Java创建一个TCP服务器,使用线程来监听端口并处理连接。 一、TCP服务器基础 ...
下面是一个简单的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的基本概念。Socket是一种用于网络通信的技术,它允许不同计算机上的应用程序通过网络进行通信。Java...
Java Socket 多线程通信是网络编程中的一个重要概念,它允许两个或多个应用程序通过TCP/IP进行数据交换。在这个示例中,我们创建了一个双向通信的系统,即双工通信,这意味着数据可以在两个方向上同时传输。这样的...
- 这可能包含一个简单的Android服务器实现的源代码文件,可能有如MainActivity.java(主应用程序入口)、ServerThread.java(处理客户端连接的线程)等文件,以及必要的布局XML文件和配置文件。 5. **实际应用**:...
Java的特点,如跨平台性、面向对象的设计理念、分布式计算能力、多线程支持以及强大的安全机制等,使其在Client-Server网络环境中具有显著优势。 ### 客户机/服务器模型概述 在传统的客户机/服务器(Client/Server,...
总结来说,"java-comm-server-client-multithread"项目是一个Java实现的多线程服务器-客户端通信示例,它展示了如何使用Java的网络编程API和多线程技术来处理并发连接。这样的系统对于理解网络通信、并发处理和线程...
在Java中,Socket是实现客户端-服务器通信的基础,而多线程则允许程序同时处理多个任务,这对于构建能够同时服务多个客户端的服务器来说至关重要。 1. **Java Socket基础** Java Socket是TCP/IP协议的应用层接口,...
以下是一个简单的Java Socket多线程服务器示例: ```java import java.io.*; import java.net.*; public class MultiThreadedServer { public static void main(String[] args) throws IOException { ...
在 Java 中,使用 Socket 来实现多线程通信需要解决两个问题:一是服务器端如何处理多个客户端的请求,二是客户端如何与服务器端进行通信。 服务器端实现多线程通信 在服务器端,使用 ServerSocket 来监听客户端的...
因此,可以考虑使用多线程处理多个并发的客户端连接。 - 对于客户端,可以在单独的线程中执行收发数据操作,以免阻塞主线程。 7. **关闭资源** - 在通信结束后,确保正确关闭Socket、输入/输出流,避免资源泄漏。...
在Android平台上,Java Web Socket是一种实现双向通信的协议,它允许服务器和客户端实时交换数据,非常适合...在`java-web-socket-master`这个项目中,你可以找到更多关于WebSocket客户端实现的示例代码和详细解释。
综上所述,"server_client通信程序"涵盖了网络通信的基础知识,包括Socket编程、TCP/IP协议、服务器和客户端的角色、数据传输以及异常处理等重要概念。通过本地实验,我们可以更好地理解和调试这类程序,确保其在...
为了优化服务器性能,服务器端可能采用了多线程或异步I/O模型(如Java NIO)来处理多个客户端请求,以提高并发处理能力。 综上所述,这个压缩包提供的代码示例涉及了客户端-服务器应用开发的基础,包括TCP/IP通信...
在本文中,我们将深入探讨Java Socket编程的关键概念、工作原理以及如何创建服务端和客户端,并讨论如何通过多线程支持多个客户端同时在线。 首先,Socket是网络上的两个进程间通信的端点,它允许数据在网络中双向...
### 三步学会Java Socket编程 #### 一、理解Socket概念与原理 ##### 1.1 套接字(Socket)...值得注意的是,实际开发过程中还需要考虑更多的细节问题,比如错误处理、多线程支持等,这些将在后续的文章中进一步探讨。
- **Server.java**:此代码示例中,服务器监听8000端口,接受连接请求,并向客户端发送一条消息:“Message from the server”。服务器端主要使用DataOutputStream向客户端输出数据,并通过DataInputStream接收...
"serverandclient.txt"可能是一个简单的服务器和客户端程序的示例,展示了如何使用Java等编程语言实现Socket多线程通信。 在实际开发中,需要注意的是,多线程通信会带来同步和互斥的问题,需要使用适当的锁机制...
服务器端多线程示例** ```java import java.io.*; import java.net.*; public class MultiThreadedServer { public static void main(String[] args) throws IOException { ServerSocket serverSocket = new ...