学习了《微博是这样炼成的》开始的一个简单多线程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 很简单 端口在程序里有定义
Linux环境下基于多线程的简单聊天工具之服务器,亲测! 建议和客户端配套使用,可采用如下生成可执行方式: gcc -o chat_server chat_server.c
一个非常简单的基于QT Dialog的多线程TCP Server程序,能实现简单的对话功能。
server.c client.c Makefile 在linux下编译通过,C语言编写,短小精练。 server实现数据转发,使用了socket中的accept,select,线程中的线程分离属性(PTHREAD_...直接实现多个client终端对话。 可做为新人学习的参考。
用C语言编程实现linux简单的聊天室功能。 用户程序命名为client.c;服务器程序命名为server.c 绑定端口等信息见实验方法内容; 要求client可以通过socket连接server ... 可选择使用多线程实现多客户端;
用多线程写的聊天程序,服务器和客户端,已经通过测试
《JAVA多线程设计模式》PDF 下载 《Java线程 高清晰中文第二版》中文第二版(PDF) 前言 第一章 线程简介 Java术语 线程概述 为什么要使用线程? 总结 第二章 Java线程API 通过Thread类创建线程 使用Runable接口...
基于java线程池、java Socket实现了一个简单的多线程Http服务器,可以实现GET资源获取功能、GET表单提交功能,POST 表单提交功能、单文件上传功能。
简单的Python的Socket连接的例子 包含Server和Client,还有一个多线程的测试
自己写的简单的TCPserver和client,支持多线程,直接运行,先运行server,然后打开client,可以直接看到测试数据交互。
在QT环境,实现了TCP Server服务器,支持多线程,代码简单明了,易于学习实现,分别继承QTcpServer和QTcpScoket实现出自己需要的类。 继承QTcpServer为每个客户端连接时分配线程,并接受处理tcpScoket的信号和槽、、...
要求读者已经熟悉cpp,winsock,mfc和多线程. 简单而能大的server/client程序演示iocp的使用
一个简单Java Socket,multi-thread 的练习。是上学时的作业。 服务器实现了多线程并发处理来自客户端的算术请求。 初学套接字编程 和 多线程编程的可以看看。 请用jdk1.6以上。
歪果仁写的SqlServer压力测试小工具,支持自定义执行语句,支持多线程重复执行指定的sql语句。执行完成后可查看平均耗时情况。使用超简单: 1、配置数据 2、编写需要执行的sql语句 3、指定重复执行次数 4、指定线程...
网络服务器 java中的简单多线程Web服务器。 它使用线程池以获得更好的客户服务
对每个请求能够创建单独的响应线程 支持多种类型文件的输出: 图片:jpe, jpeg, jpg, gif, png 文本:txt, stm, htm, html, css, doc, docx 音频:mp3 其他:pdf 更新记录 ###V1.0.1 2015年6月10日 修正设置环节...
Baby FTP Server是一款小巧(仅40 KB)免费、绿色(无需安装,解压即可运行)的简易FTP服务器软件,使用它可以快速地创建一个FTP服务器。 Baby FTP Server支持大部分的RFC959 FTP命令,支持PASV和non-PASV两种连接...
客户端文件续传上传到服务端,客户端http协议上传文件,客户端webserver上传文件,客户端续传,分割上传到服务器,模拟百度网盘文件上传 由于项目的需要一个客户端用来上传文件的,所以今天做了一个简单的例子
简单的linux多线程 socket server模板
一个简单的多线程JAVA WEB服务器,实现静态网页以及简单JSP访问,cookie解析等。希望对想了解JAVA WEB服务器的同学有帮助