`

一个简单多线程server

    博客分类:
  • net
阅读更多
学习了《微博是这样炼成的》开始的一个简单多线程server,先把代码记录下来,经测试很好用。有一点点小疑问?
package net;
import java.net.*;
import java.io.*;

public class ServerThread extends Thread{
	private Socket client;//线程对象要处理的连接变量
	private OutputStream out;//输出流对象
	/**创建此线程对象时,传入一个要处理的连接对象*/
	public ServerThread(Socket socket)
	{
		this.client = socket;
	}
	
	//封装发送消息的代码
	public void sendMsg2Me(String msg) throws Exception
	{
		byte[] data = msg.getBytes();
		out.write(data);
		out.flush();
	}
	
	//调用处理连接的方法
	public void run()
	{
		try {
			processChat(client);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	//客户端处理进入的连接对象
	private void processChat(Socket client) throws Exception
	{
		out = client.getOutputStream();
		InputStream in = client.getInputStream();
		String s = "你好,欢迎来到本论坛!\r\n";
		this.sendMsg2Me(s);
		String inputS = readString(in);
		while(!inputS.equals("bye"))
		{
			System.out.println("客户端说:"+inputS);
			s  = "我收到你的话了"+inputS+"\r\n";
			this.sendMsg2Me(s);
			inputS = readString(in);
		}
		s = "欢迎再来!\r\n";
		this.sendMsg2Me(s);
		System.out.println("客户端退出连接!");
		client.close();
	}
	
	/**
	 * 从流上(客户端)读到的字符串
	 */
	private String readString(InputStream ins) throws IOException
	{
		StringBuffer str = new StringBuffer();
		char c=0;
		while(c!=13)
		{
			int i = ins.read();
			c = (char)i;
			str.append(c);
		}
		return str.toString().trim();
	}
	
	//启动服务器,等待客户端进入
	public static void setUpServer(int port)
	{
		try
		{
			ServerSocket server = new ServerSocket(port);
			System.out.println("服务器创建成功!\r\n");
			while(true)
			{
				Socket client = server.accept();
				ServerThread tServerThread = new ServerThread(client);
				tServerThread.start();
				System.out.println("已经启动了一个线程去处理这个对象了!");
			}
		}catch(Exception e)
		{
			e.printStackTrace();
		}
	}
	
	public static void main(String args[])
	{
		ServerThread.setUpServer(9090);
	}
}


书上setUpServer()方法不是static方法,那么我又该如何启动这个类呢?
疑问已经解决;可以再写一个类去掉用。
package net;
import java.io.IOException;
import java.net.*;
public class SetUpServer {
	public static void main (String args[]) throws IOException
	{
		ServerSocket tServer = new ServerSocket(9090);
		while(true)
		{
			Socket tCilent = tServer.accept();
			ServerThread tThread = new ServerThread(tCilent);
			tThread.start();
		}
	}
}


具体的检验方式可于dos命令行输入telnet localhost 9090
分享到:
评论

相关推荐

    简单的多线程WebServer

    【标题】"简单的多线程WebServer"是一个个人编写的基于多线程技术的网络服务器。这个WebServer设计得相对基础,主要目的是为了让用户理解多线程在Web服务中的应用。 【描述】提到,该WebServer的实现非常简单,其...

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

    以下是一个简单的Python TCPServer多线程示例: ```python import socket import threading class TCPThreadServer: def __init__(self, host='localhost', port=12345): self.server_socket = socket.socket...

    基于mongoose实现Http Server(多线程)

    本文将详细介绍如何使用mongoose库创建一个支持多线程的HTTP服务器,并探讨相关技术要点。 **mongoose库介绍** mongoose是一个轻量级的C语言库,用于构建嵌入式Web服务器。它具有易于使用的API,支持多种HTTP特性...

    java单线程多线程clientserver

    Java中的单线程和多线程是编程中的关键概念,特别是在服务器端开发中。了解它们的原理和应用对于构建高效、可扩展的客户端-服务器应用至关重要。以下是对这些概念的详细解析。 首先,我们来谈谈单线程。在Java中,...

    使用Java编写的一个简易多线程HTTP服务器

    标题中的“使用Java编写的一个简易多线程HTTP服务器”指的是一个使用Java编程语言实现的简单HTTP服务器,它利用了多线程技术来处理客户端的HTTP请求。在Java中,可以使用Socket编程接口来建立TCP连接,进而实现HTTP...

    c# window服务多线程实例

    例如,下面是一个简单的多线程Windows服务的示例: ```csharp using System; using System.ServiceProcess; using System.Threading; public partial class MyService : ServiceBase { public MyService() { ...

    CoProc_MultiThread_autoit3_autoit_多线程_au3多线程_au3_

    6. **Example_TcpServer.au3**: 可能是一个创建 TCP 服务器的例子,利用多线程处理来自多个客户端的连接请求。每个连接都可以在单独的线程中处理,以提高服务器的并发能力。 7. **Example_Suspend.au3**: 这个示例...

    java(简易)多线程HTTP服务器

    在Java编程领域,构建一个简易的多线程HTTP服务器是一项常见的练习,这有助于理解网络通信、线程管理和HTTP协议的基本原理。在这个项目中,我们利用Java的线程池和Socket库来实现这样一个服务器,它支持GET、POST...

    多线程Web服务器的设计与实现

    1. **多线程**:多线程是指在一个程序中可以同时执行多个独立的线程。在Web服务器中,多线程技术用于处理并发请求,使得服务器能够同时服务于多个客户端,提高资源利用率和响应效率。Java语言提供了丰富的多线程API...

    C#多线程连接mysql,Access

    多线程允许一个应用程序同时执行多个任务,提升程序的执行效率。在C#中,我们可以使用`System.Threading`命名空间下的`Thread`类来创建和管理线程。例如,创建一个新的线程并启动它,可以这样写: ```csharp Thread...

    简单QT多线程聊天程序

    这个“简单QT多线程聊天程序”旨在提供一个基础的学习平台,帮助开发者理解如何在QT环境中利用多线程进行并发处理。 QT框架是一个跨平台的C++库,提供了丰富的GUI工具和网络编程接口。在这个聊天程序中,多线程技术...

    Python TCPServer 多线程多客户端通信的实现

    Python的`socketserver`模块提供了`ThreadingTCPServer`类,它是一个混合类,继承自`TCPServer`和`ThreadingMixIn`,允许我们创建一个多线程的TCP服务器。`ThreadingTCPServer`会在每个客户端连接时创建一个新的线程...

    基于java server/socket 多线程技术的聊天室程序服务端。

    本文将深入分析一个基于Java Server/Socket多线程技术实现的聊天室程序服务端。该服务端能够支持多人群聊和单人私聊功能。通过详细解读其代码结构、工作原理以及关键实现细节,帮助读者更好地理解Java多线程在网络...

    tcp client简单实例 连接,发送接收断开,多线程

    在这个“tcp client简单实例 连接,发送接收断开,多线程”中,我们将探讨如何使用编程实现一个简单的TCP客户端,特别关注多线程的应用。 首先,TCP客户端的基本工作流程包括以下几个步骤: 1. **建立连接**:...

    java socket 多线程 简易实现

    Java Socket多线程简易实现是网络编程中的一个基础概念,主要应用于客户端与服务器之间的通信。在Java中,Socket是基于TCP协议的,提供了一种可靠的、面向连接的字节流通信方式。多线程则是Java并发编程的重要特性,...

    基于多线程的简单聊天工具之服务器

    Linux环境下基于多线程的简单聊天工具之服务器,亲测! 建议和客户端配套使用,可采用如下生成可执行方式: gcc -o chat_server chat_server.c

    VC++简单的多线程聊天程序课程设计

    本课程设计项目旨在利用Visual C++(VC++)开发一个简单的多线程局域网聊天程序。随着互联网的发展,即时通讯软件如QQ、MSN等已经成为人们日常生活中的重要组成部分。这些软件的实现往往涉及到复杂的网络通信和多...

    JAVA 多线程Client\Server 聊天 serverQQ

    【Java 多线程Client/Server聊天程序:ServerQQ详解】 在Java编程中,多线程技术是构建高效并发应用程序的基础。在这个名为"ServerQQ"的项目中,开发者利用Java的多线程特性实现了客户端(Client)与服务器端...

    Qtcpserver实现多线程服务器,里面包括单线程普通服务器

    以下是一个简单的多线程服务器实现: 1. 创建一个新的类,继承自QThread,用于处理每个连接。 2. 在这个类中,重写run方法,这是线程实际执行的入口。 3. 当接收到新的连接时,创建一个新线程实例,并将QTcpSocket...

Global site tag (gtag.js) - Google Analytics