ServerSocket用法详解 教程下载 源代码下载
嗨,大家好,我是寻觅:各位JAVA爱好者你现在看到是本人摘取
上面教程的一部分,即我和一个网友遇到的问题,和解决。如果你对ServerSocket用法很重视,想系统学习;请下载上面的教程(来自:
developer.51cto.com),谢谢支持 !
3.6 创建多线程的服务器
在本书第1章的1.5.1节的例程1-2的EchoServer中,其service()方法负责接收客户连接,以及与客户通信。service()方法的处理流程如下:
while (true) {
Socket socket=null;
try {
socket = serverSocket.accept(); //接收客户连接
//从Socket中获得输入流与输出流,与客户通信
…
}catch (IOException e) {
e.printStackTrace();
}finally {
try{
if(socket!=null)socket.close(); //断开连接
}catch (IOException e) {e.printStackTrace();}
}
}
|
EchoServer接收到一个客户连接,就与客户进行通信,通信完毕后断开连接,然后再接收下一个客户连接。假如同时有多个客户请求连接,这些客户就必须排队等候EchoServer的响应。EchoServer无法同时与多个客户通信。
许多实际应用要求服务器具有同时为多个客户提供服务的能力。HTTP服务器就是最明显的例子。任何时刻,HTTP服务器都可能接收到大量的客户请求,每个客户都希望能快速得到HTTP服务器的响应。如果长时间让客户等待,会使网站失去信誉,从而降低访问量。
可以用并发性能来衡量一个服务器同时响应多个客户的能力。一个具有好的并发性能的服务器,必须符合两个条件:
◆能同时接收并处理多个客户连接;
◆对于每个客户,都会迅速给予响应。
服务器同时处理的客户连接数目越多,并且对每个客户作出响应的速度越快,就表明并发性能越高。
用多个线程来同时为多个客户提供服务,这是提高服务器的并发性能的最常用的手段。本节将按照3种方式来重新实现EchoServer,它们都使用了多线程。
◆为每个客户分配一个工作线程。
◆创建一个线程池,由其中的工作线程来为客户服务。
◆利用JDK的Java类库中现成的线程池,由它的工作线程来为客户服务。
3.6.1 为每个客户分配一个线程
服务器的主线程负责接收客户的连接,每次接收到一个客户连接,就会创建一个工作线程,由它负责与客户的通信。以下是EchoServer的service()方法的代码:
public void service() {
while (true) {
Socket socket=null;
try {
socket = serverSocket.accept(); //接收客户连接
Thread workThread=new Thread(new Handler(socket)); //创建一个工作线程
workThread.start(); //启动工作线程
}catch (IOException e) {
e.printStackTrace();
}
}
}
|
以上工作线程workThread执行Handler的run()方法。Handler类实现了Runnable接口,它的run()方法负责与单个客户通信,与客户通信结束后,就会断开连接,执行Handler的run()方法的工作线程也会自然终止。如例程3-5所示是EchoServer类及Handler类的源程序。
例程3-5 EchoServer.java(为每个任务分配一个线程)
package multithread1;
import java.io.*;
import java.net.*;
public class EchoServer {
private int port=8000;
private ServerSocket serverSocket; public EchoServer() throws IOException {
serverSocket = new ServerSocket(port);
System.out.println("服务器启动");
} public void service() {
while (true) {
Socket socket=null;
try {
socket = serverSocket.accept(); //接收客户连接
Thread workThread=new Thread(new Handler(socket)); //创建一个工作线程
workThread.start(); //启动工作线程
}catch (IOException e) {
e.printStackTrace();
}
}
} public static void main(String args[])throws IOException {
new EchoServer().service();
}
} class Handler implements Runnable{ //负责与单个客户的通信
private Socket socket;
public Handler(Socket socket){
this.socket=socket;
}
private PrintWriter getWriter(Socket socket)throws IOException{…}
private BufferedReader getReader(Socket socket)throws IOException{…}
public String echo(String 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();}
}
}
}
|
分享到:
相关推荐
本文将详细讲解ServerSocket的使用方法及其在多线程环境下的应用。 1. ServerSocket的构造方法 - ServerSocket():默认构造方法,没有指定端口和连接请求队列长度,可能由系统自动分配端口。 - ServerSocket(int ...
在Java编程语言中,`ServerSocket`类是网络编程的核心组件之一,主要用于监听客户端的连接请求,从而在...通过阅读“ServerSocket用法详解.pdf”,你可以更深入地学习如何利用这些技术来设计和实现复杂的网络应用。
Java Socket网络编程是Java平台中的核心特性,它为开发者提供了在TCP/IP协议下创建网络应用的能力。Socket编程主要用于实现客户端和服务器之间的通信,基于客户机/服务器模型。在这个模型中,服务器端通常处于被动...
Java网络编程的基础知识、套接字编程、非阻塞通信、创建HTTP服务器与客户程序、数据报通信、对象的序列化与反序列化、Java反射机制、RMI框架、JDBC API、JavaMail API、MVC设计模式、安全网络通信、CORBA和Web服务
1. **Java网络编程基础**:首先,书中会介绍Java中的Socket编程,包括TCP和UDP协议的基础知识,以及如何使用Java的Socket和ServerSocket类创建客户端和服务器端的连接。 2. **I/O与NIO**:Java的I/O流系统是网络...
Java网络编程案例教程习题参考答案涵盖了Java网络编程的基础知识点,包括Socket编程、TCP/IP协议、Java Socket类、ServerSocket类、Java网络编程模型、网络编程常见问题、多线程编程、并发编程、Socket选项、网络...
Java网络编程是Java开发中的重要领域,它涵盖了网络通信的所有基本概念和技术,使得Java应用程序能够通过网络进行数据传输和交互。在本节中,我们将深入探讨Java网络编程的关键知识点,包括套接字(Socket)编程、多...
《JAVA网络编程大全》是一本全面且深入介绍Java网络编程技术的权威著作,旨在帮助读者掌握Java在构建网络应用程序中的核心概念和实践技巧。PDF版的书籍为学习者提供了便捷的电子阅读体验,随时随地都能深化对Java...
Socket和ServerSocket是Java网络编程中的核心组件,用于实现客户端和服务器之间的通信。在这个实践案例中,我们将深入探讨这两个类的使用以及如何构建一个简单的聊天应用。首先,我们需要理解Socket和ServerSocket的...
### ServerSocket 用法详解:深入理解服务器端通信机制 #### 一、ServerSocket概览 在客户端/服务器通信架构中,ServerSocket扮演着至关重要的角色。它作为服务器端的入口,负责监听特定端口上的连接请求,并为每...
本实验报告主要介绍了Java网络编程的基本概念和实现方法,通过设计和实现一个简单的客户端/服务器应用程序,了解Java网络编程的基本原理和实现方法。 知识点1:Java 网络编程基础 Java 网络编程是指使用 Java 语言...
在这个压缩包中,包含了一个名为"Java2编程详解.pdf"的PDF文件,这很可能是书籍的扫描版,允许用户免积分下载阅读。 Java2,也被称为Java 2平台标准版(J2SE),是Java开发的一个关键版本,引入了许多重要的改进...
Java套接字网络编程详解 Java套接字网络编程是一种强大的技术,用于开发基于TCP/IP网络的Java程序。Java的这种力量来源于他独有的用于网络的API,这些API是一系列的类和接口,均位于包java.net和javax.net中。 套...
以下将详细讨论《JAVA并发编程实践》和《Java网络高级编程》两本书中涵盖的关键知识点。 首先,让我们关注并发编程。并发编程是现代多核处理器系统中不可或缺的一部分,它允许程序同时执行多个任务,从而提高系统...
根据给定的文件标题“Java网络高级编程1.pdf”以及其描述和标签,我们可以推断出这份文档主要聚焦于Java语言在网络编程领域的高级应用。Java作为一种广泛应用的编程语言,在网络编程方面提供了丰富的API和框架,使得...
这本书详细介绍了如何使用Java语言进行网络应用开发,涵盖了从基础概念到高级技术的广泛内容。下面我们将深入探讨其中的关键知识点。 1. **Java网络编程基础**: - **套接字(Sockets)**:Java通过Socket类和...
在Android 4.0(Ice Cream Sandwich)系统中,网络编程是实现应用程序与远程服务器交互的重要部分。本章将深入探讨如何在Android平台上进行网络操作,包括基础的HTTP请求、数据传输、网络状态监听以及更高级的Socket...