ImageVerifierCode 换一换
格式:DOCX , 页数:26 ,大小:79.21KB ,
资源ID:9849079      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-9849079.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(JAVA网络聊天室.docx)为本站会员(b****8)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

JAVA网络聊天室.docx

1、JAVA网络聊天室JAVA聊天室系统JAVA聊天室由客户端和服务器端组成。先启动服务器端程序,再启动客户端程序,服务器验证身份后便可登陆聊天室。客户聊天时可选择聊天对象私聊,也可以跟所有在线用户聊天。1、 总体设计2、 界面设计:聊天室界面大小为600*450;登陆对话框界面大小为250*200;布局:主要体现在客户端。进入聊天室主界面之前有一个登陆对话框。其中包括服务器ip,用户名和密码的填写。聊天室的主界面主要分为两个大容器,中间是textViewTalk文本区域,显示聊天信息。底下包括发送按钮,聊天信息输入框,在线人员组合框以及一些标签。 3、 软件结构:服务器端ChatServer 包

2、括主类ChatServer和 ServerThread类两个程序。ServerThread为用户线程,每次有新用户加入就建立新的线程来处理该用户的消息,并将其加入在线用户列表。ChatServer为主类,包括初始化变量,并建立套接字监听客户端链接请求。如果接受的有效的客户端请求则创建新的线程来处理该用户的任务。按照用户请求类型处理不同的任务:1)如果是注册用户,则将用户名与已经注册的用户比较,如果找到该用户名则返回用户已经注册错误并在客户端显示错误类型,否则创建新用户并加入到用户信息文件中。 2)如果是登录用户则验证用户名和密码是否正确并给出相应提示。 3)如果是用户发送的消息也分为两类:第一

3、,如果用户选择对所有人说,则服务器端程序将消息发送到所有在线用户端。第二,如果用户选择对某个人说话,则服务器段先查找该用户是否在线,如果在线则发送到该用户端。 4)将消息写入文件保存 客户端: 客户端软件包括两部分:第一是登录界面,用户输入服务器IP,用户名和密码即可登录聊天系统,如果是第一次使用还可以注册用户。第二部分是聊天信息板,如果用户登陆成功则显示改面板。客户端软件主要是将用户消息打包发送到服务器段,由服务器端进行分析并做出相应的响应。发送给服务器端的消息格式为:消息类型前导字|发送者|接受者|消息其中消息类型前导字主要用户服务器段判断消息类型,主要有一下几种消息类型:login(登录

4、)、reg(注册)、init(刷新所有用户在线列表)、talk(发言,其中又包括对所有人发言以及对某个人发言)。 4、 源代码/*源代码*/服务器端类 名 称:ChatServer程序简介:创建套接字并监听客户端连接请求 */import java.io.*;import .*;import java.text.SimpleDateFormat;import java.util.*;public class ChatServer ServerSocket serverSocket; / 创建服务器端套接字 public ChatServer() try serverSocket = new S

5、erverSocket(8888); System.out.println(启动服务.); System.out.println(服务端口: + 8888); getIP(); / 得到并显示服务器端IP while (true) Socket socket = serverSocket.accept(); / 监听客户端连接请求 new ServerThread(socket); / 启动线程处理与客户的通讯 catch (IOException e) System.out.println(错误 启动服务失败! + e); / 得到服务器IP地址并显示 public void getIP()

6、 try InetAddress localAddress = InetAddress.getLocalHost(); byte ipAddress = localAddress.getAddress(); System.out.println(服务器IP: + (ipAddress0 & 0xff) + . + (ipAddress1 & 0xff) + . + (ipAddress2 & 0xff) + . + (ipAddress3 & 0xff); catch (Exception e) System.out.println(错误 获取IP失败. + e); / 实例化类对象 publ

7、ic static void main(String args) new ChatServer(); /*/服务器端类 名 称:ServerThread功能:建立新线程处理客户端请求*/import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.DataInputStream;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.io.InputS

8、treamReader;import java.io.OutputStreamWriter;import java.io.PrintWriter;import java.io.RandomAccessFile;import .Socket;import java.text.SimpleDateFormat;import java.util.Date;import java.util.StringTokenizer;import java.util.Vector;class ServerThread extends Thread private Socket socket;/ 定义客户端套接字

9、private BufferedReader in;/ 定义输入流 private PrintWriter out;/ 定义输出流 private static Vector onlineUser = new Vector(10, 5); private static Vector socketUser = new Vector(10, 5); private String strReceive, strKey; private StringTokenizer st; private final String USERLIST_FILE = user.txt; / 设定存放用户信息的文件 pr

10、ivate final String USERINFO_FILE = info.txt; public ServerThread(Socket client) throws IOException socket = client; in = new BufferedReader(new InputStreamReader(socket.getInputStream(); / 客户端接收out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(), true);/ 客户端输出 th

11、is.start(); public void run() try while (true) strReceive = in.readLine();/ 从服务器端接收一条信息后拆分、解析,并执行相应操作 st = new StringTokenizer(strReceive, |); strKey = st.nextToken(); if (strKey.equals(login) login(); else if (strKey.equals(talk) talk(); else if (strKey.equals(init) initClientOnline(); else if (str

12、Key.equals(reg) register(); catch (IOException e) / 用户关闭客户端造成此异常,关闭该用户套接字。 String leaveUser = closeSocket(); System.out.println(系统 + leaveUser + 离开聊天室!); sendAll(talk| + leaveUser + 离开了聊天室。); / 判断是否有该注册用户 SuppressWarnings(deprecation) private boolean isExistUser(String name) String strRead; try File

13、InputStream inputfile = new FileInputStream(USERLIST_FILE); / create input stream DataInputStream inputdata = new DataInputStream(inputfile); while (strRead = inputdata.readLine() != null) StringTokenizer stUser = new StringTokenizer(strRead, |); if (stUser.nextToken().equals(name) return true; catc

14、h (FileNotFoundException fn) System.out.println(错误 信息文件不存在! + fn); out.println(warning|读写文件时出错!); catch (IOException ie) System.out.println(错误 + ie); out.println(warning|读写文件时出错!); return false; / 判断用户的用户名密码是否正确 SuppressWarnings(deprecation) private boolean isUserLogin(String name, String password)

15、String strRead; try FileInputStream inputfile = new FileInputStream(USERLIST_FILE); / create input stream DataInputStream inputdata = new DataInputStream(inputfile); while (strRead = inputdata.readLine() != null) if (strRead.equals(name + | + password) return true; catch (FileNotFoundException fn) S

16、ystem.out.println(错误 文件不存在! + fn); out.println(warning|读写文件时出错!); catch (IOException ie) System.out.println(错误 + ie); out.println(warning|读写文件时出错!); return false; / 用户注册 private void register() throws IOException String name = st.nextToken(); / 得到用户名称 String password = st.nextToken().trim();/ 得到用户密码

17、 if (isExistUser(name) System.out.println(错误 + name + 注册失败!); out.println(warning|该用户已存在,请改名!); else RandomAccessFile userFile = new RandomAccessFile(USERLIST_FILE,rw); userFile.seek(userFile.length(); / 在文件尾部加入新用户信息 userFile.writeBytes(name + | + password + rn); out.println(warning|注册成功,请重新登录!); /

18、返回注册成功 / 用户登陆(从登陆框直接登陆) private void login() throws IOException String name = st.nextToken(); / 得到用户名称 String password = st.nextToken().trim();/ 得到用户密码 boolean succeed = false; System.out.println(用户登录 + name + : + password + : + socket); for (int i = 0; i all: + strTalkInfo);/保存聊天信息 else if (strSend

19、er.equals(strReceiver) out.println(talk|不能对自己说话!); else saveInfo(strSender + = + strReceiver + : + strTalkInfo);/保存聊天信息 for (int i = 0; i onlineUser.size(); i+) if (strReceiver.equals(onlineUser.elementAt(i) socketSend = (Socket) socketUser.elementAt(i); outSend = new PrintWriter(new BufferedWriter(

20、 new OutputStreamWriter(socketSend .getOutputStream(), true); outSend.println(talk| + strSender + 对你说: + strTalkInfo); else if (strSender.equals(onlineUser.elementAt(i) socketSend = (Socket) socketUser.elementAt(i); outSend = new PrintWriter(new BufferedWriter( new OutputStreamWriter(socketSend .get

21、OutputStream(), true); outSend.println(talk|你对 + strReceiver + 说: + strTalkInfo); / 刷新在线用户列表 private void initClientOnline() throws IOException String strOnline = online; for (int i = 0; i onlineUser.size(); i+) strOnline += | + onlineUser.elementAt(i); out.println(strOnline); / 信息群发 private bool se

22、ndAll(String strSend) Socket socketSend; PrintWriter outSend; try for (int i = 0; i socketUser.size(); i+) socketSend = (Socket) socketUser.elementAt(i); outSend = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socketSend.getOutputStream(),true); outSend.println(strSend); return true; catch (IOException e) System.out.println(错误发送失败!

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2