聊天室Java课程设计Word下载.docx

上传人:b****6 文档编号:18270317 上传时间:2022-12-14 格式:DOCX 页数:22 大小:106.02KB
下载 相关 举报
聊天室Java课程设计Word下载.docx_第1页
第1页 / 共22页
聊天室Java课程设计Word下载.docx_第2页
第2页 / 共22页
聊天室Java课程设计Word下载.docx_第3页
第3页 / 共22页
聊天室Java课程设计Word下载.docx_第4页
第4页 / 共22页
聊天室Java课程设计Word下载.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

聊天室Java课程设计Word下载.docx

《聊天室Java课程设计Word下载.docx》由会员分享,可在线阅读,更多相关《聊天室Java课程设计Word下载.docx(22页珍藏版)》请在冰豆网上搜索。

聊天室Java课程设计Word下载.docx

3.系统详细设计

3.1数据库设计:

用户表User:

列明

类型

长度

是否为主键

描述

Username

varchar

32

用户名

Nickname

昵称

Password

密码

Gender

char

1

性别:

缺省0男

Age

int

4

年龄

City

城市

Online

是否在线:

缺省0离线

好友表Friend:

Id

8

标识id

username

外键

Friendname

用户名(好友)

3.2页面设计

3.2.1:

登录页面:

用户在登录页面,可以输入用户名和密码进入系统,当然,若用户输入的用户名和密码不正确,系统会给出提示,新用户也可以通过该页面链接到注册页面进行注册,然后回到该页面进行登录

3.2.2:

注册页面:

用户在登录页面可以直接登录系统,若是新用户没有登录信息,则会被引导到该页面进行注册,注册新用户时,需要安装一定的规则输入用户信息,有必填项,以及相应的验证。

3.2.3,登录成功后的用户主页面:

用户登录成功之后,在用户的主界面会显示出用户的好友列表等信息,同时也会显示出该用户的好友是否在线等信息。

右键单击用户:

搜索用户,并可以通过该页面添加好友,页面如下:

查看资料:

点击聊天室,可以实现群聊:

3.2.4、服务器端代码:

Server.java

packagemainserver;

importjava.io.IOException;

import.ServerSocket;

import.Socket;

importjava.util.HashMap;

importjava.util.Map;

/**

*服务器主线程,负责接收客户端连接,并开启相应线程响应

*

*服务器的事务:

0,主线程,负责接收客户端连接,并开启相应线程响应登陆用户请求

*1,定时检测连接状态,并修改相应的用户状态,如果连接关闭(非正常关闭,例如网络故障导致;

而登陆用户正常退出由子线程负责处理状态的修改。

),则

*将相应用户的状态设为未登陆,以保证同一时刻一个用户只能登陆一次。

PS:

由于主线程无法很好的监控各套接字的状态,因此1该为在子线程中处理

*@authorAdministrator

*/

publicclassServer{

/**

*服务器状态:

true:

开启false:

关闭

privatebooleanrunning;

privatestaticfinalintSERVER_PORT=9999;

publicstaticMap<

String,ServiceHandler>

connections=newHashMap<

();

ServerSocketserverSocket;

*服务器参数初始化

privatevoidinit(){

}

publicServer(){

*服务器开启

publicvoidstart(){

init();

try{

serverSocket=newServerSocket(SERVER_PORT);

}catch(IOExceptione){

System.out.println("

ServerSocket建立失败"

);

e.printStackTrace();

return;

}

startServer();

while(running){

Socketsocket=null;

try{

System.out.println("

Listenning......"

socket=serverSocket.accept();

System.out.println(socket.getRemoteSocketAddress());

newServiceHandler(socket).start();

}catch(IOExceptione){

e.printStackTrace();

}

publicvoidcloseServer(){

running=false;

System.exit(0);

privatevoidstartServer(){

running=true;

publicbooleanisRunning(){

returnrunning;

}

ServiceHandler.java

importjava.io.BufferedReader;

importjava.io.InputStreamReader;

importjava.io.OutputStream;

importjava.util.Arrays;

importjava.util.Iterator;

importjava.util.List;

importmessages.AddFriend;

importmessages.DelFriend;

importmessages.Friends;

importmessages.Info;

importmessages.Login;

importmessages.MessageEnd;

importmessages.Regist;

importmessages.SearchFriend;

importmessages.Send;

importmessages.Update;

importdao.Friend;

importdao.FriendDAO;

importdao.User;

importdao.UserDAO;

*处理单个客户端请求的线程如果socket读取或发送数据失败,按用户退出登陆处理

publicclassServiceHandlerextendsThread{

privateSocketsocket;

privateBufferedReaderin;

privateOutputStreamout;

privatebooleanisOK;

privateStringcurrentUser;

publicServiceHandler(Socketsocket){

this.socket=socket;

isOK=true;

out=socket.getOutputStream();

isOK=false;

in=newBufferedReader(newInputStreamReader(socket

.getInputStream()));

*向客户端发送数据如果发送失败,修改用户状态为未登录

*@parammsg

publicsynchronizedvoidsend(Stringmsg){

if(!

isOK){

send:

"

+msg);

//ShowErrorMsg.display(msg);

out.write(msg.getBytes());

out.flush();

userQuit();

privatesynchronizedStringread(){

Stringtmp=null;

tmp=in.readLine();

if(tmp!

=null){

returntmp;

returnnull;

*发送或接收数据失败,修改用户状态

*@paramb

privatevoidchangeUserState(booleanb){

//设定为上线

if(b){

synchronized(Server.connections){

Server.connections.put(this.currentUser,this);

}else{

Server.connections.remove(this.currentUser);

newUserDAO().setOnline(this.currentUser,b);

*如果读取失败,修改用户状态为未登录从客户端读取数据

*@paramsocket

privateStringreceiveTitle(){

StringBufferbuffer=newStringBuffer();

returnbuffer.toString();

if((tmp=in.readLine())!

buffer.append(tmp);

returnbuffer.toString();

privatevoiduserQuit(){

System.out.println("

失去一个连接。

"

isOK=false;

changeUserState(false);

publicvoidrun(){

while(isOK){

Stringtitle=this.receiveTitle();

if(title!

=null&

&

title.length()!

=0){

if(title.equals(Login.title)){

System.out.println("

get:

+Login.title);

System.out.println(this.read());

loginHandle();

}elseif(title.equals(AddFriend.title)){

this.read();

addFriendHandler();

}elseif(title.equals(Friends.title)){

friendsHandler();

}elseif(title.equals(Regist.title)){

registHandler();

}elseif(title.equals(SearchFriend.title)){

searchFriendHandler();

}elseif(title.equals(Send.title)){

intid=Integer.parseInt(this.read());

sendHandler(id);

}elseif(title.equals(Update.title)){

updateHandler();

}elseif(title.equals(Info.title)){

infoHandler();

}elseif(title.equals(DelFriend.title)){

delFriendHandler();

}else{

nothingcatched"

}

socket.close();

privatevoiddelFriendHandler(){

Stringuser=this.read();

this.read();

newFriendDAO().delete(user,this.currentUser);

this.send("

success"

+MessageEnd.end+DelFriend.title+MessageEnd.end

+MessageEnd.end);

privatevoidinfoHandler(){

Stringusername=this.read();

Userresult=newUserDAO().getUserInfo(username);

StringBufferreply=newStringBuffer();

reply.append("

+MessageEnd.end+Info.title+MessageEnd.end);

reply.append(result.getAge()+MessageEnd.end+result.getCity()

reply.append(result.getGender()+MessageEnd.end+result.getNickName()

reply.append(result.getPassWord()+MessageEnd.end

+result.getUserName()+MessageEnd.end);

reply.append(MessageEnd.end);

this.send(reply.toString());

privatevoidupdateHandler(){

Useruser=newUser();

user.setUserName(this.currentUser);

user.setNickName(this.read());

user.setPassWord(this.read());

user.setCity(this.read());

user.setAge(Integer.parseInt(this.read()));

user.setGender(this.read().charAt(0));

newUserDAO().update(user);

+MessageEnd.end+Update.title+MessageEnd.end

+MessageEnd.end);

privatevoidsendHandler(intid){

Stringtarget=this.read();

Stringcontent=this.read();

if(Server.connections.containsKey(target)){

ServiceHandlerhand=Server.connections.get(target);

connection:

+target+"

got"

if(hand!

gotinside"

hand.send("

+MessageEnd.end+"

send"

+MessageEnd.end

+(id)+MessageEnd.end+this.currentUser

+MessageEnd.end+content.replace('

\n'

'

#'

+MessageEnd.end+MessageEnd.end);

privatevoidsearchFriendHandler(){

Stringname=this.read();

Stringvalue=this.read();

buffer.append("

+MessageEnd.end);

buffer.append(SearchFriend.title+MessageEnd.end);

List<

String>

result=newUserDAO().getUserFullName(value);

for(intindex=0;

index<

result.size();

index++){

buffer.append(result.get(index)+MessageEnd.end);

buffer.append(MessageEnd.end);

this.send(buffer.toString());

privatevoidregistHandler(){

user.setUserName(this.read());

System.out.println(user.getUserName()+"

read"

System.out.println(user.getPassWord()+"

System.out.println(user.getNickName()+"

System.out.println(user.getCity()+"

user.setOnline(false);

if(newUserDAO().insertUser(user)){

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1