QQ_MultiTalkServer
package test_teacher;
import java.net.*;
import java.io.*;
public class MultiTalkServer
{
public static void main(String[] args) throws IOException
{
ServerSocket serverSocket = null;
boolean listening = true;
int clientNumber = 0;
try {
serverSocket = new ServerSocket(4444);
}
catch (IOException e){
System.err.println("Could not listen on port: 4444.");
System.exit(-1);
}
while (listening)
{
Socket socket;
socket = serverSocket.accept(); //程序将在此等候客户端的连接
clientNumber++;
new MultiTalkServerThread(socket, clientNumber).start();
}
serverSocket.close();
}
}
class MultiTalkServerThread extends Thread
{
private Socket socket = null;
private int clientNumber;
public MultiTalkServerThread(Socket socket, int clientNumber)
{
super("MultiTalkServerThread");
this.socket = socket;
this.clientNumber = clientNumber;
System.out.println("Accept Client" + clientNumber);
}
public void run()
{
try {
PrintWriter out = new PrintWriter(socket.getOutputStream(), true); //auto flush
BufferedReader in = new BufferedReader(
new InputStreamReader(
socket.getInputStream()));
BufferedReader sin = new BufferedReader( new InputStreamReader( System.in ) );
String sinputLine, inputLine;
boolean sinbye = false;
boolean inbye = false;
inputLine = in.readLine();
System.out.println( "from Client" + clientNumber + ": " + inputLine );
while( true )
{
if(inputLine.equals("Bye."))
{
inbye = true;
sinbye = true;
sinputLine = "Bye.";
out.println(sinputLine);
out.flush();
System.out.println("Server: " + "Reply to client " + clientNumber +" : " + sinputLine);
}
else
{
sinputLine = "Reply to client " + clientNumber +" : " + inputLine;
out.println(sinputLine);
out.flush();
System.out.println("Server: " + sinputLine);
}
if( sinbye == true && inbye == true )
break;
if( inbye == false )
{
inputLine = in.readLine();
System.out.println( "form Client " + clientNumber + ": " + inputLine );
}
}
out.close();
in.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
QQ_MultiTalkServer的更多相关文章
- django模型操作
Django-Model操作数据库(增删改查.连表结构) 一.数据库操作 1.创建model表
随机推荐
- 字符串查找算法总结(暴力匹配、KMP 算法、Boyer-Moore 算法和 Sunday 算法)
字符串匹配是字符串的一种基本操作:给定一个长度为 M 的文本和一个长度为 N 的模式串,在文本中找到一个和该模式相符的子字符串,并返回该字字符串在文本中的位置. KMP 算法,全称是 Knuth-Mo ...
- 每天一个Linux命令(13)--less命令
less 工具也是对文件或其它输出进行分页显示的工具,应该说是Linux正统馋看文件内容的工具,功能极其强大.less 的用法比起 more 更加有弹性. 在 more 的时候,我们没有办法向前面 ...
- Nginx错误页面优雅显示
一.Nginx错误页面优雅显示的原因? 当我们访问网站时,由于特殊的原因,经常会出现诸如403,404,503等错误,这极大的影响用户的访问体验,所以我们很有必要做一下错误页面的优雅显示,以提升用 ...
- 【整理】图解隐马尔可夫模型(HMM)
写在前面 最近在写论文过程中,研究了一些关于概率统计的算法,也从网上收集了不少资料,在此整理一下与各位朋友分享. 隐马尔可夫模型,简称HMM(Hidden Markov Model), 是一种基于概率 ...
- fmt标签格式化数字和时间
有时候需要格式化输出数字和时间,fmt 标签是个很好用的标签,下面是我做的总结: 在页面的头部加入这个标签 <%@ taglib uri="http://java.sun.com/js ...
- Convert Sorted Array to Binary Search Tree & Convert Sorted List to Binary Search Tree
Given an array where elements are sorted in ascending order, convert it to a height balanced BST. Su ...
- 1782: [Usaco2010 Feb]slowdown 慢慢游
1782: [Usaco2010 Feb]slowdown 慢慢游 Time Limit: 1 Sec Memory Limit: 64 MBSubmit: 570 Solved: 346[Sub ...
- 浅谈并发和tomcat线程数
假设Tomcat每到固定一个时间会有一个高峰,峰值的并发达到了3000以上,最后的结果是Tomcat线程池满了,日志看很多请求超过了1s. 服务器性能很好,Tomcat版本是7.0.54,配置如下 & ...
- Shell中的算术运算(译)
算术运算 尽管Shell中的变量被缺省地看做是string类型,而非number,但是Shell本身仍然支持算术运算.主要有以下5种方式. 1. declare 2. expr $ z=5 $ z=` ...
- iOS网络编程笔记——Socket编程
一.什么是Socket通信: Socket是网络上的两个程序,通过一个双向的通信连接,实现数据的交换.这个双向连路的一端称为socket.socket通常用来实现客户方和服务方的连接.socket是T ...