import java.net.*;
import java.util.*;
import java.io.*;
public class ChatServer
{
public static void main(String[] args)
{
Hashtable<String,DataOutputStream> userList = new Hashtable<String,DataOutputStream>();
DataInputStream dis;
DataOutputStream dos;
String name;
try
{
ServerSocket ss = new ServerSocket(9978);
while(true)
{
Socket s = ss.accept();
dis = new DataInputStream(s.getInputStream());
dos = new DataOutputStream(s.getOutputStream());
name = dis.readUTF();
userList.put(name,dos);
new Server(name,userList,dis,dos).start();
}
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
class ClientInformation
{
public static int num = 0;
public static String desknum[] = new String[10];
public static String name[] = new String[10];
public static String headicon[] = new String[10];
}
class Server extends Thread
{
private Hashtable<String,DataOutputStream> userList;
private DataInputStream dis;
private DataOutputStream dos;
private DataOutputStream dos2;
private String name;
private String name2;
private String info;
private String iconstring;
private String iconstring2;
private String desknum;
private String desknum2;
private boolean judue = false;
public Server(String name,Hashtable<String,DataOutputStream> userList,DataInputStream dis, DataOutputStream dos)
{
this.name = name;
this.dis = dis;
this.userList = userList;
this.dos = dos;
}
public void run()
{
try
{
if(ClientInformation.num > 0)
{
String s = String.valueOf(ClientInformation.num);
try{
dos.writeUTF("comein");
dos.writeUTF(s);
for(int i = 0; i < ClientInformation.num; ++i)
{
dos.writeUTF(ClientInformation.desknum[i]);
dos.writeUTF(ClientInformation.name[i]);
dos.writeUTF(ClientInformation.headicon[i]);
}
}
catch(Exception e)
{
e.printStackTrace();
}
}
transimitMessage(name+"进入大厅","服务器信息 ");
while(true)
{
info = dis.readUTF();
if(info.equals("exit")){
DataOutputStream dos = (DataOutputStream)(userList.get(name));
dos.close();
dis.close();
userList.remove(name);
Collection doses = userList.values();
if(judue)
{
for(int i = 0; i < ClientInformation.num; ++i)
{
if(name == ClientInformation.name[i])
{
String Temp;
Temp = ClientInformation.desknum[i];
ClientInformation.desknum[i] = ClientInformation.desknum[ClientInformation.num - 1];
ClientInformation.desknum[ClientInformation.num - 1] = Temp;
Temp = ClientInformation.name[i];
ClientInformation.name[i] = ClientInformation.name[ClientInformation.num - 1];
ClientInformation.name[ClientInformation.num - 1] = Temp;
Temp = ClientInformation.headicon[i];
ClientInformation.headicon[i] = ClientInformation.headicon[ClientInformation.num-1];
ClientInformation.headicon[ClientInformation.num - 1] = Temp;
ClientInformation.num--;
break;
}
}
for(Object o:doses)
{
dos = (DataOutputStream)o;
try{
dos.writeUTF("exit");
dos.writeUTF(desknum);
}catch(Exception e){
e.printStackTrace();
}
}
}
transimitMessage(name+"退出大厅","服务器信息 ");
break;
}
else if(info.equals("sit"))
{
String OutPutString;
desknum = dis.readUTF();
iconstring = dis.readUTF();
int DeskNum = Integer.parseInt(desknum);
if(DeskNum <= 10)
{
OutPutString = String.valueOf(DeskNum);
desknum2 = String.valueOf(DeskNum + 10);
}
else
{
OutPutString = String.valueOf(DeskNum - 10);
desknum2 = OutPutString;
}
transimitMessage_sit(name+"进入"+OutPutString+"号桌子","服务器信息 ");
}
else if(info.equals("move"))
{
name2 = dis.readUTF();
int H_YS =dis.readInt();
int H_XS = dis.readInt();
int B_YS = dis.readInt();
int B_XS = dis.readInt();
boolean Rule = dis.readBoolean();
transimitMessageMove(H_YS, H_XS, B_YS, B_XS, Rule);
}
else if(info.equals("Chat"))
{
name2 = dis.readUTF();
String Chat = dis.readUTF();
dos2 = userList.get(name2);
try
{
dos2.writeUTF("Chat");
dos2.writeUTF(Chat);
}
catch(Exception e)
{
e.printStackTrace();
}
}
else if(info.equals("Start"))
{
name2 = dis.readUTF();
dos2 = userList.get(name2);
try
{
dos2.writeUTF("Start");
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
}
catch(Exception e)
{
e.printStackTrace();
}
}
public void transimitMessage(String msg,String SeverInf)
{
Collection doses = userList.values();
DataOutputStream dos;
for(Object o:doses)
{
dos = (DataOutputStream)o;
try
{
dos.writeUTF(SeverInf+":"+msg);
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
public void transimitMessage_sit(String msg,String SeverInf)
{
try
{
Collection doses = userList.values();
DataOutputStream Dos;
int ZNum = ClientInformation.num;
int DeskNum = Integer.parseInt(desknum);
boolean Otherplayer = false;
boolean JudgeDN = true;
for(int i = 0; i < ZNum; ++i)
{
if(desknum.equals(ClientInformation.desknum[i]))
{
JudgeDN = false;
break;
}
else if(desknum2.equals(ClientInformation.desknum[i]))
{
Otherplayer = true;
name2 = ClientInformation.name[i];
iconstring2 = ClientInformation.headicon[i];
dos2 = userList.get(name2);
}
}
if(JudgeDN)
{
if(Otherplayer)
{
if(judue != true && name != name2)
{
try
{
dos.writeUTF("play");
dos.writeUTF(name2);
dos.writeUTF(iconstring2);
dos2.writeUTF("play");
dos2.writeUTF(name);
dos2.writeUTF(iconstring);
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
for(Object o:doses)
{
Dos = (DataOutputStream)o;
try
{
Dos.writeUTF(SeverInf+": "+msg);
Dos.writeUTF(info);
String Numstring = desknum;
Dos.writeUTF(Numstring);
Dos.writeUTF(name);
Dos.writeUTF(iconstring);
}
catch(Exception e)
{
e.printStackTrace();
}
}
if(judue == true)
{
for(int i = 0; i < ZNum; ++i)
{
if(name == ClientInformation.name[i])
{
ClientInformation.desknum[i] = desknum;
ClientInformation.name[i] = name;
ClientInformation.headicon[i] = iconstring;
}
}
}
else
{
ClientInformation.desknum[ClientInformation.num] = desknum;
ClientInformation.name[ClientInformation.num] = name;
ClientInformation.headicon[ClientInformation.num] = iconstring;
ClientInformation.num++;
judue = true;
}
}
}
catch(Exception e)
{
e.printStackTrace();
}
}
public void transimitMessageMove(int H_YS, int H_XS, int B_YS, int B_XS, boolean Rule)
{
dos2 = userList.get(name2);
try
{
dos2.writeUTF("Move");
dos2.writeInt(H_YS);
dos2.writeInt(H_XS);
dos2.writeInt(B_YS);
dos2.writeInt(B_XS);
dos2.writeBoolean(Rule);
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
分享到:
相关推荐
基于java的开发源码-HTTP服务器 TJWS.zip 基于java的开发源码-HTTP服务器 TJWS.zip 基于java的开发源码-HTTP服务器 TJWS.zip 基于java的开发源码-HTTP服务器 TJWS.zip 基于java的开发源码-HTTP服务器 TJWS.zip 基于...
《基于Java的109号Java学习平台-LW源码解析》 在计算机科学领域,尤其是软件开发中,源码是程序设计的基础,它揭示了软件的内部运作机制。本资料包“基于java的-109-java学习平台--LW-源码.zip”提供了一个完整的...
基于JAVA毕业设计-JAVA贪吃蛇游戏毕业设计(源代码+论文).rar 摘要:随着通信技术的发展和手机的普及,手机游戏的开发技术越来越为人们所关注。以J2ME为开发平台,利用Java提供强大工具,不但可以在手机上实现静态...
基于JAVA毕业设计-JAVA基于J2ME的手机游戏开发(论文+源代码).rar 摘要:随着通信技术的发展和手机的普及,手机游戏的开发技术越来越为人们所关注。以J2ME为开发平台,利用Java提供强大工具,不但可以在手机上实现...
Java毕业设计--基于springboot开发的java学习平台--毕业论文+PPT(附源代码+演示视频) 开发语言:Java 框架:springboot JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7(一定要5.7版本) 数据库工具:...
基于java的开发源码-HTTP代理服务器 Smart Cache.zip 基于java的开发源码-HTTP代理服务器 Smart Cache.zip 基于java的开发源码-HTTP代理服务器 Smart Cache.zip 基于java的开发源码-HTTP代理服务器 Smart Cache.zip ...
Java是一种程序设计语言,它具有简单的、完全面向对象以及与平台无关的结构,也具有可移植性、高性能和安全性,并提供了多线程的功能,而Java语言最大的成功之处在于它的平台无关性和具有强大的网络编程功能,基于...
基于JAVA毕业设计-JAVA基于SNMP网络设备MIB信息采集(论文+源代码).rar 【摘要】在本文中,设计了一个针对TCP/IP网络的基于SNMP网络设备的MIB信息采集系统。这个系统采用三层模型进行设计,最底层负责SNMP中基本对象...
基于JAVA毕业设计-JAVA游戏设计打飞机程序(源代码+论文).rar 在信息社会中,手机及其他无线设备越来越多的走进普通百姓的工作和生活,随着信息网络化的不断进展,手机及其他无线设备上网络势在必行。但是传统手机...
基于JAVA毕业设计-JAVA医药管理系统设计(论文+源代码).rar 目前国内使用和发展的MIS 平台模式大体有两种:客户机/服务器(Client/Server,简称C/S)模式和Web浏览器/服务器(Browser/Server,简称B/S)模式。利用某个...
基于JAVA毕业设计-JAVA002打飞机游戏设计(程序+论文).rar 在信息社会中,手机及其他无线设备越来越多的走进普通百姓的工作和生活,随着信息网络化的不断进展,手机及其他无线设备上网络势在必行。但是传统手机存在...
基于JAVA毕业设计-JAVA文件传输(论文+源代码).rar 随着计算机网络技术的飞速发展,客户/服务C/S(Client/Sersver)结构成为开发FTP的网络编程结构,Java作为Web应用程序的开 发技术也为更多的人所采用。 起初, FTP并...
基于JAVA毕业设计-JAVA打飞机游戏毕业设计(源代码+论文).rar 在信息社会中,手机及其他无线设备越来越多的走进普通百姓的工作和生活,随着信息网络化的不断进展,手机及其他无线设备上网络势在必行。但是传统手机...
基于JAVA毕业设计-JAVA五子棋手机网络对战游戏的设计与实现(源代码+论文).rar 在现代社会中,手机及其它无线设备越来越多的走进普通老百姓的工作和生活。 随着3G技术的普及与应用,基于Java开发的软件在手机上的使用...
基于JAVA毕业设计-JAVA打飞机游戏设计与实现(论文+源代码).rar 在信息社会中,手机及其他无线设备越来越多的走进普通百姓的工作和生活,随着信息网络化的不断进展,手机及其他无线设备上网络势在必行。但是传统手机...
基于JAVA毕业设计-JAVA基于局域网的聊天室系统(源代码+论文).rar 频聊天系统作为一种新型的通信和交流工具,突破了地域的限制,可以提供更为便捷、灵活、全面的音、视频信息的传递和服务,具有极其广泛的发展前景。 ...
基于JAVA毕业设计-JAVA本地监听与远程端口扫描(源代码+论文).rar 随着Internet的不断发展,信息技术已成为社会进步的巨大推动力。不管是存储于服务器里还是流通于Internet上的信息都已成为一个关系事业成败的关键,...
- **功能描述**:基于Java教材中的TCP聊天程序示例,结合多线程设计,实现服务器端与多个客户端同时聊天的功能。 - **主要特性**: - 图形化界面,支持服务器端和多个客户端。 - 服务器端和客户端可以同时进行聊天...
Java毕业设计--基于springboot开发的原创歌曲分享平台--毕业论文+PPT(附源代码+演示视频) 开发语言:Java 框架:springboot JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7(一定要5.7版本) 数据库工具:...
【标题】"基于Java的源码-HTTP服务器 TJWS.zip" 涉及的主要知识点是Java编程语言、网络协议中的HTTP以及服务器开发。TJWS(Tiny Java Web Server)是一个小型、快速且易于理解的开源Java HTTP服务器,适用于学习和...