`
myway84
  • 浏览: 203045 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
文章分类
社区版块
存档分类
最新评论

多线程服务器的改造

阅读更多
多线程服务器的改造
测试方法:在命令行里输入 telnet localhost 9090
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.*;
public class ServerThread extends Thread{

private Socket Client;//线程对象要处理的连接变量
private OutputStream out;//输出流对象

// 创建这个线程对象时,传入一个他要处理的连接对象
public ServerThread(Socket sc)
{
  this.Client=sc;
}

//将发送的消息代码包装到一个方法中
public void sendMsg2Me(String msg)
{
byte[] data=msg.getBytes();//从字符串得到一个字节数组
try {
out.write(data);//用输出对象发送
out.flush();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

public void run()
{
//在RUN中调用处理连接的方法
processChat(this.Client);
//处理方法执行完毕后,线程自己退出

}


//处理客户端进入的连接对象
private void processChat(Socket client)
{
try
{
out=client.getOutputStream();//得到一个输出/输入的流对象
InputStream ins=client.getInputStream();
String s="你好,欢迎来到服务器\r\n";
this.sendMsg2Me(s);//发送信息
String inputS=readString(ins);//读取客户端发来的

while(!inputS.equals("bye"))
{
s="我收到了你说的话"+inputS+"\r\n";
this.sendMsg2Me(s);//将这个字符串发送给客户端对象
inputS=readString(ins);//再次读取

}
s="你好,欢迎再来!\r\n";
this.sendMsg2Me(s);
client.close();

}catch(Exception e)
{
e.printStackTrace();
}
}

/**
* 输入流对象中读取字节,拼成一个字符串返回
* 如何读取到一个字节为13,则认为以前的是一个字符串
* ins输入流对象
* return:从流上(客户端发来的)读到的字符串
* @param ins
* @return
* @throws IOException
*/
private String readString(InputStream ins) throws IOException
{
StringBuffer stb=new StringBuffer();//创建一个字符串缓冲区
char c=0;
while(c!=13)//13是回车的ASC码
{//遇到一个换行就是一句话
int i=ins.read();//读取客户端发来的一个字节
c=(char)i;//将输入的字节转换为一个char
stb.append(c);
}
//把读到的字节组转换为字符串
String inputS=stb.toString().trim();
return inputS;

}



public static void main(String[] args) {

/**
* 在指定端口上启动一个服务器
* @param prot:服务器所有的端口
*/

// public void setUpServer(int port)
// {
try
{
//1.建立绑定在指定端口上的服务器对象
ServerSocket server=new ServerSocket(9090);
while(true)//让服务器进入循环等待状态
{
Socket client=server.accept();
//创建了一个线程对象时传入进入的连接
ServerThread st=new ServerThread(client);
st.start();//启动这个线程去处理连接
System.out.println("已启动一个线程去处理这个连接对象了");
}
}catch(Exception e)
{
e.printStackTrace();
}
// }
}

}
分享到:
评论

相关推荐

    使用TCPServer编写(多线程)socket服务

    在IT行业中,网络编程是不可或缺的一部分,特别是在服务器端开发中,使用TCPServer编写多线程的socket服务是一项基础但重要的技术。本文将详细讲解如何使用TCPServer来实现这样的服务,以及多线程在其中的作用。 ...

    代理服务器改造设计说明书.doc

    - **多进程执行任务**:相比于之前的多线程执行方式,新的设计采用了多进程模型来提高性能和稳定性。 - **进程管理**:负责管理进程的创建、销毁等操作。 - **任务分配**:将任务合理地分配给各个进程。 ### 三、...

    GetFast-实现自动断点续传_多线程断点续传改造_policemanf9a_

    在"GetFast"中,多线程可能被用来分段下载文件,每个线程负责一部分数据的获取。这样可以同时利用多个网络连接,提高下载速度。同时,即使某个线程的下载因网络问题中断,其他线程仍能继续工作,整体的下载过程不会...

    Linux多线程端口扫描[归纳].pdf

    在实现过程中,首先对原有的循环模式或多进程模式的远程控制程序服务器进行改造,转变为多线程模式。在接收到客户端连接请求时,服务器不再在主循环中处理,而是创建一个新的线程来服务该客户端。由于不需要等待子...

    多线程在Visual_Studio_C_的应用实例教程

    八、多线程改造 在基础版本上,我们可以将IP地址的解析工作分配给多个线程,每个线程负责处理一部分IP地址。这样,解析工作可以在多个线程之间并行进行,大大提高效率。 通过对比单线程和多线程版本的执行时间,...

    自己写的简单的TCPserver和client,支持多线程,直接运行

    这个项目包含了一个简单的TCP服务器(Server)和客户端(Client),并且实现了多线程功能,便于同时处理多个连接请求。下面我们将深入探讨相关知识点。 **1. TCP协议** TCP(Transmission Control Protocol)是一种...

    简易WEB服务器(简单改造可当IIS使用)

    3. **多线程**:处理并发请求,可能通过线程池或者异步IO实现。 4. **路由和请求处理**:如何解析URL,匹配路由规则,并调用适当的处理器。 5. **动态内容生成**:如果这个服务器支持动态页面,那么涉及CGI、ASP.NET...

    利用Java多线程技术导入数据到Elasticsearch的方法步骤

    本文将介绍使用Java的多线程技术来提高数据导入效率的方法步骤,以期帮助读者更好地理解并应用这一技术。 ### Java多线程技术 Java中的多线程技术是指在同一个程序中可以同时运行多个线程来执行多个任务。Java提供...

    双核英特尔® 安腾® 2 架构服务器改造您的数据中心

    ### 双核英特尔® 安腾® 2 架构服务器改造您的数据中心 #### 关键知识点解析 **一、双核英特尔®安腾®2架构服务器的优势** 1. **卓越性能与大型机级可靠性** - 双核英特尔®安腾®29000系列处理器平台提供比前...

    易语言-易语言简单多线程访问网页取内容 带进度条 完成百分比

    《易语言简单多线程访问网页取内容:技术解析与应用》 易语言,作为一款中文编程语言,以其直观易懂的语法特性深受广大程序员喜爱。在标题中提到的“易语言简单多线程访问网页取内容 带进度条 完成百分比”,其核心...

    php异步多线程swoole用法实例

    Swoole是一个高性能的PHP异步多线程网络通信框架,它重新定义了PHP语言在网络编程上的能力,提供了异步多线程服务器、TCP/UDP网络客户端、异步MySQL、数据库连接池、AsyncTask、消息队列、毫秒级定时器、异步文件...

    server_client通信程序

    在IT领域,服务器客户端通信是网络编程中的基本概念,它涉及到如何通过网络连接使一台计算机(服务器)能够接收并处理另一台计算机(客户端)的请求。在这个“server_client通信程序”中,我们很可能会看到使用...

    下载千千静听服务器歌词(delphi)

    多线程处理,使得在下载歌词的同时不影响用户界面的响应;以及可能的本地缓存策略,避免频繁向服务器请求相同的歌词。 总的来说,这个项目展示了如何利用Delphi结合网络编程和数据解析技术,实现与第三方服务器交互...

    Web server with thread pool

    本项目旨在将一个基础的单线程Web服务器改造为采用线程池模型的多线程服务器,以提高并发性能和资源管理效率。以下是关于这一主题的详细知识解释: 1. **线程池概念**:线程池是一种多线程编程的管理策略,它预先...

    集中式应用系统分布式改造方案研究.pdf

    例如,最大消息队列深度、多线程操作的并发线程数量等。配置管理中心使得对这些参数的调整可以全局统一执行,而不是逐台应用调整。 7. 轻量化改造的目标 对于集中式应用系统,进行轻量化改造是关键,改造的目标是让...

    live555 的openRTSP 改写

    - **RTSPClient类**:负责与RTSP服务器交互,发送DESCRIBE、SETUP、PLAY等命令,并处理服务器的响应。 - **RTPSession类**:管理RTP数据包的接收,包括数据包的解封装和解码。 - **MediaSink类**:接收解码后的数据...

    spring rmi 改造

    线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务。通过设置线程池的最大线程数、核心线程数、线程存活时间等参数,我们可以有效地管理和调度线程,提高系统效率。在...

    基于客户端和服务器的点菜系统.pdf

    开发过程中,可能涉及Java的多线程处理,以应对多个客户端的并发访问,同时优化SQL语句和程序响应方法,提高系统性能。 总的来说,基于客户端和服务器的点菜系统通过现代化信息技术,实现了餐饮服务的智能化和高效...

    php上传多个文件blueimp/jQuery-File-Upload大改造

    其核心特性包括进度条显示、预览、多线程上传、以及对大文件的支持。这个插件默认提供了基本的上传功能,但在实际项目中往往需要根据具体需求进行定制。 改造的第一步是理解jQuery File Upload的工作原理。它通过...

    Intel C 9.0:迈向多核CPU时代的终极优化利器.pdf

    这意味着单纯依赖提高时钟频率提升性能的时代结束,软件开发者必须学会利用多线程编程来应对这一转变。著名C++专家在《免费午餐的结束》一文中指出,程序员需要掌握多线程编程,否则将无法充分利用CPU的性能提升。...

Global site tag (gtag.js) - Google Analytics