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毕业设计--基于ssm框架开发的师生交流反馈答疑平台系统--毕业论文+ppt(附源代码) 开发语言:Java 框架:ssm 技术:JSP JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7(一定要5.7版本) 数据库工具:...
基于JAVA毕业设计-J2EE的B2C电子商务系统开发(论文+系统+开题报告+文献综述+任务书+答辩PPT+中期报表+外文文献 当今社会,科学技术突飞猛进,知识经济初见端倪。电子商务作为一种新型的贸易方式,极大地促进了全球经济...
基于Java网上书城设计与实现 本文档主要介绍了基于Java网上书城的设计与实现。随着科学技术的发展,网络在人们生活中的应用越来越广泛。人们越来越想在最短的时间内购买到自己所需的图书。但书目的繁多,给人们在...
Java毕业设计-基于SSM框架的培训学校教学管理平台.rar 【项目技术】 开发语言:Java 框架:ssm+vue 架构:B/S 数据库:mysql 【演示视频-编号:222】 https://pan.quark.cn/s/b3a97032fae7 【实现功能】 此培训...
图书管理系统主要分为三个客户端登陆,分别是借书还书的读者、图书的管理员,每个客户端的功能是...使用说明:将源码导入Java ee工具(如:ecplise),导入数据库脚本到ORACLE数据库,修改数据库连接语句,调试运行。
【Java课程设计-酒店管理系统】是一项综合性的实践项目,旨在运用Java编程语言和相关技术,构建一个基于J2EE平台的酒店管理应用。该系统的主要目的是让学生在实践中巩固已学的理论知识,掌握SSH(Spring、Struts、...
Java毕业设计-基于SSM框架的高校试题管理系统.rar 【项目技术】 开发语言:Java 框架:ssm+vue 架构:B/S 数据库:mysql 【演示视频-编号:337】 https://pan.quark.cn/s/b3a97032fae7 【实现功能】 此基于SSM框架...
Java毕业设计-基于SSM框架的网络教学平台(源码+演示视频+说明).rar 【项目技术】 开发语言:Java 框架:ssm+vue 架构:B/S 数据库:mysql 【演示视频-编号:117】 https://pan.quark.cn/s/b3a97032fae7 【实现功能...
Java毕业设计-基于ssm框架的校园二手交易系统(源码+说明+演示视频) 【项目技术】 java+mysql+ssm+b/s 【实现功能】 校园二手交易系统共分为两个部分,一部分是面向用户的前台部分,包括:用户的注册、登陆、查看商品...
基于springboot框架的java毕业设计-滴答拍摄影项目(源码+说明) 【项目技术】 开发语言:Java 框架:springboot 架构:B/S 数据库:mysql 【实现功能】 1.管理员功能模块 滴答拍摄影项目,在管理员登录系统的首页...
Java毕业设计-基于ssm框架的在线考试系统(源码+说明+演示视频) 【项目技术】 java+mysql+ssm+b/s 【实现功能】 (1)系统管理员,系统管理员主要是对系统内的基本信息进行管理,对教师和学生的信息进行管理,对系统...
Java毕业设计-基于SSM框架的德云社票务系统(源码+演示视频+说明).rar 【项目技术】 开发语言:Java 框架:ssm+vue 架构:B/S 数据库:mysql 【演示视频-编号:063】 https://pan.quark.cn/s/b3a97032fae7 【实现...
基于JAVA的UDP服务器模型源代码,内含UDP服务器端模型和UDP客户端模型两个小程序,向JAVA初学者演示UDP C/S结构的原理。 简单聊天软件CS模式 2个目标文件 一个简单的CS模式的聊天软件,用socket实现,比较简单。 ...
综上所述,该Java课程设计的员工工资管理系统实现了基于Java面向对象编程和MySQL数据库的集成,提供了用户友好的界面和高效的数据处理能力,满足了企业对员工信息管理的需求。设计者通过该项目不仅巩固了Java编程和...
java毕业设计-基于SSM+Vue的消防物资存储系统源码+数据库+文档.zip 高分通过项目,已获导师指导。 本项目是一套基于SSM的消防物资存储系统,主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的Java学习...
Java毕业设计-基于ssm框架的框架的网上招聘系统(源码+说明) 【项目技术】 java+mysql+ssm+b/s 【实现功能】 分为前台展示系统和后台管理系统两个部分,这两个部分共用mysql 数据库。前台展示系统用来实现和用户的...
本文将介绍一个基于JAVA开发的电子商务系统的设计与实现,重点关注系统所使用的平台、技术以及实现的主要功能。 ### 技术平台与工具 #### MyEclipse MyEclipse是一款功能强大的Java集成开发环境(IDE),它提供...
Java毕业设计-基于SSM框架的疫情管理系统(源码+演示视频+说明).rar 【项目技术】 开发语言:Java 框架:ssm+vue 架构:B/S 数据库:mysql 【演示视频-编号:197】 https://pan.quark.cn/s/b3a97032fae7 【实现功能...
Java毕业设计-基于ssm框架的企业人事管理系统(源码+说明+演示视频) 【项目技术】 java+mysql+ssm+b/s 【实现功能】 登陆、部门管理、加班管理、考勤管理、请假管理、工资管理、业绩管理、用户管理。
4.1登陆页面 14 4.2注册页面 15 4.3快递员页面 16 4.4派单员订单管理页面 19 4.5订单添加页面 19 4.6快递员添加页面 20 4.7客户界面 21 4.8 个人信息维护界面 22 4.9用户添加页面 23 4.5留言页面 24 4.6投诉页面 25 ...