2.多线程服务器的实现
在前面已经实现的服务器是不能让多个客户端连接进来的,只能让单个客户端的接入,首先阐明一点不能够让多个客户端接入的原因:ServerSocket在调用accept方法时是阻塞的,在一个客户端接入后,另外需要连接进来的客户端必须等待前面这个客户端正常退出以后才能够进入。有了多线程的知识,我们就可以让阻塞的部分在一个独立的线程里面独立的运行,每当一个客户端接入以后就创建一个线程对象去处理,这就是多线程服务器的基本原理。下面看代码示例:
首先创建ServerSocket对象,打开一个端口,让客户端连接进来这个类主要负责构建服务器
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class ServerSet{
private InputStream in;
private OutputStream ou;
private ServerSocket ss;
/**
* 创建服务器
*
* @param port
* :端口号
*/
public void setupServer(int port) {
try {
// 创建服务器套接字
ss = new ServerSocket(port);
while(true){
Socket sc=ss.accept();
//创建客户端处理线程对象
ServerThread st=new ServerThread(sc);
//启动线程
st.start();
}
} catch (Exception ef) {
ef.printStackTrace();
}
}
//程序入口
public static void main(String args[]) {
ServerSet s=new ServerSet();
s.setupServer(12345);
}
}
单独创建一个线程类,处理客户端的阻塞部分
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
public class ServerThread extends Thread{
private Socket sc;
private InputStream in;
private OutputStream ou;
/**
* 通过该类的构造器方法把需要的参数传递过来
* @param sc:客户端套接字对象
*/
public ServerThread(Socket sc){
this.sc=sc;
}
public void run(){
this.clientPro();
}
/**
* 处理客户端的方法
*/
public void clientPro(){
try{
System.out.println("一个客户端接入");
//得到输入输出流对象
in=sc.getInputStream();
ou=sc.getOutputStream();
String s="欢迎那个谁!";
this.sendMsg(s);
int t;
//遇到回车结束读取
while((t=in.read())!=13){
System.out.println(t);
}
//关闭客户端的链接
sc.close();
}catch(Exception ef){
ef.printStackTrace();
}
}
//发送信息的私有方法
private void sendMsg(String msg)throws Exception{
ou.write(msg.getBytes());
ou.flush();
}
}
分享到:
相关推荐
循序渐进的学习方法可以帮助我们逐步理解这一复杂的过程。标题"通信阶段----循序渐进6"表明这是一个系列教程的第六部分,可能涵盖了前五个阶段的基础,并在此基础上进一步深入。 在描述中,虽然没有直接给出详细...
通信阶段——循序渐进4 在这个专题中,我们将深入探讨通信阶段的第四部分,重点关注在软件开发中,特别是IT领域中的通信技术和方法。通信是任何系统之间交换信息的基础,无论是设备之间的通信,还是人与人之间的...
《Windows编程循序渐进1-18》是一份深入探讨Windows操作系统编程的教程,旨在帮助初学者逐步掌握Windows编程的核心概念和技术。本教程通过18个章节的详细讲解,全面覆盖了从基础到高级的各种主题,对于网络安全和...
循序渐进学习WinPcap编程是为新手提供的一份指南,帮助他们从基本的安装配置到实现网络数据包捕获,再到深入分析和开发更复杂网络应用的过程。 在开始使用WinPcap之前,需要进行一系列准备工作。首先,需要下载并...
《山寨版QQ——韩顺平循序渐进学Java》是一个基于韩顺平老师的Java教学视频创作的项目,旨在帮助学习者深入理解Java编程语言,尤其是网络编程和GUI设计方面。这个项目分为两大部分:QQ客户端和服务器端,涵盖了基础...
### 循序渐进Linux:基础教材概览与知识点解析 #### 一、Linux系统介绍与版本概述(1.1) - **Red Hat Linux**(1.1.1): Red Hat是最早的企业级Linux发行版之一,广泛应用于服务器领域。它提供了强大的企业级支持...
以技术成长路线为基础,循序渐进地学习Windows系统程序设计和应用软件开发。 涵盖基本开发技能、综合应用开发技术和系统程序设计技术,全面而细致。 实例导向,目标驱动;使读者的阅读过程既轻松愉快,又学...
学习Java是一项系统工程,需要循序渐进地掌握各个知识点。以下是一份详细的Java学习路径,涵盖从基础到进阶的各个部分。 1. **J2SE基础**:首先,你需要掌握Java的基础语法,包括面向对象编程的三大特性——封装、...
以技术成长路线为基础,循序渐进地学习Windows系统程序设计和应用软件开发。 涵盖基本开发技能、综合应用开发技术和系统程序设计技术,全面而细致。 实例导向,目标驱动;使读者的阅读过程既轻松愉快,又学...
《Windows编程循序渐进-代码.rar》是一个与Windows编程相关的资源压缩包,包含了两部分代码实例:Windows编程循序渐进-代码1.rar和Windows编程循序渐进-代码2.rar。这些代码实例通常是为了配合一本名为《Windows编程...
本“PLSql循序渐进全面学习教程”旨在帮助初学者和进阶者深入理解和掌握这一强大的数据库编程工具。教程共分为14个部分,涵盖了PLSql的各个核心概念和技术。 1. **基础篇**:首先,你需要了解PLSql的基本语法,包括...
《Windows编程循序渐进源代码1-3.rar》是一个包含Windows编程教学源代码的压缩文件,涵盖了19个章节的内容。此资源旨在帮助学习者逐步掌握Windows平台下的编程技术,包括MFC(Microsoft Foundation Classes)编程和...
这个“循序渐进ASP.NET教程”旨在帮助初学者逐步掌握ASP.NET的核心概念和技术,从而能够独立地开发高效、稳定的Web应用。 在学习ASP.NET时,首先要理解它的基本架构。ASP.NET采用事件驱动模型,通过控件和事件处理...
### VB6.0中文版循序渐进教程关键知识点概览 #### 1. Visual Basic 6.0入门与编程基础 - **环境搭建**:介绍如何安装配置VB6.0开发环境,理解集成开发环境(IDE)的布局与功能。 - **基本语法**:涵盖VB6.0中的变量...
本教程“面向对象系统设计循序渐进”旨在为初学者提供一个易懂的学习路径,帮助他们逐步掌握这一领域的核心知识。 首先,我们来探讨UML(统一建模语言)。UML是软件开发中用于建模和描述面向对象系统的主要工具。它...
《Windows编程循序渐进》是一本旨在帮助初学者逐步掌握Windows系统下程序设计的教程。这本书通过清晰的章节划分和实例代码,让读者能够深入理解Windows编程的核心概念和技术。光盘源码rar文件包含了书中各个关键章节...
本资料包“循序渐进学习Power Builder 6.0.zip”显然是为了帮助初学者或有志于深入理解PowerBuilder的人提供一个系统的学习路径。 首先,让我们来了解PowerBuilder 6.0的基础知识。PowerBuilder采用的是PBDW(Power...
《QT019-循序渐进学C#》是一本专门为编程初学者设计的教程,旨在引导读者逐步掌握C#编程语言的核心概念和技术。这本书的PDF格式使得读者可以方便地在电子设备上阅读和查阅,同时其详细的目录和清晰的结构确保了学习...
通过循序渐进的学习,读者将能够掌握ASP.NET的全面技能,具备开发复杂Web应用的能力。 总的来说,这门教程覆盖了ASP.NET的基础到进阶知识,不仅适合初学者入门,也对有经验的开发者具有参考价值。通过学习和实践,...
《Windows编程循序渐进》是一本针对初学者和进阶者全面介绍Windows系统编程的书籍,其清晰完整版提供了一套系统的学习路径,适合有志于深入理解Windows平台底层机制的开发者。这本书涵盖了大量的实践案例和详尽的...