java聊天工具源代码.doc

合集下载

基于JSP的网络聊天室

基于JSP的网络聊天室

课程名称JAVA Web 应用程序实验名称基于JSP的网络聊天室班级学号姓名一、功能模块:-1.用户注册(注册用户保存在application中)-2.用户登录-3.用户注销-4.留言功能二、要求:- 1.用户注册、登录都要进行客户端检查是否信息为空-2.用户登录之后,服务器端需要检查是否是合法的用户-3.显示的每条信息都包括登录用户姓名、留言内容及留言时间-4.其它内容可以自己扩展三、实验步骤和模块实验总体来说分为三大部分,分别为:用户注册、用户登录和用户留言,其中用户注销为一个小功能,因此不做过多描述1.用户注册首先来介绍第一部分用户注册界面,在该界面中用户填写信息后提交,程序自动将用户姓名和密码保存在application中以便在用户登录时核对信息,源代码为:form.html<html><head><title>Java Web</title><script langguage="JavaScipt">function checkvalid(){var str1=.value;var str2=login.pwd.value;var str3=login.sex.value;var str4=login.pwd.value;var str5=login.pwd2.value;if(str1==""){alert("没有输入用户名");return false;}if(str2==""){alert("没有输入密码");return false;}if(str3==""){alert("没有输入性别");return false;}if(str4!=str5){alert("密码不匹配");return false;}}</script><body><form method="post" action="ex08.jsp" name="login"> <div align="center">name(必须输入项):<input type="text" name="name"><br>passord(必须输入项):<input type="password" name="pwd"><br>passord(重新输入):<input type="password" name="pwd2"><br></div><p align="center">性别(必须输入项):<input Type="Radio" Name="sex" Value="男" Checked>男<input Type="Radio" Name="sex" Value="女">女 </p> <p align="center">户口所在城市</p><p align="center"><select name="City" ><option selected>北京市</option><option>上海市</option><option>天津市</option><option>重庆市</option></select></p><p align="center">曾经居住地</p><p align="center"><select name="juzhu" multiple ><option>北京市</option><option>上海市</option><option>天津市</option><option>重庆市</option></select></p><p align="center">爱好:</p><div align="center"><input type="checkbox" name="JOB" value="上网" >旅游<br><input type="checkbox" name="JOB" value="游戏">游戏<br><input type="checkbox" name="JOB" value="看电影">看电影<br><input type="checkbox" name="JOB" value="看书">看书<br><input type="checkbox" name="JOB" value="听音乐">听音乐<br><input type="checkbox" name="JOB" value="其他">其他<br><p align="center">用户备注信息:</p><p align="center"><textarea name="liuyan" rows="10" cols="30"></textarea></p><div align="center"><input type="reset" name="reset" value="重置"><input type="submit" name="submit" onClick="return checkvalid()" value="提交"></div></form></body></html>值得注意的是,在注册界面一定要完成任务要求,即进行客户端检查是否信息为空,同时密码两次输入是否匹配。

SimpleChat程序(一对多聊天源代码 java)

SimpleChat程序(一对多聊天源代码 java)

package com.wyh.chatRoom;import java.awt.BorderLayout;import java.awt.Color;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintWriter;import .InetAddress;import .ServerSocket;import .Socket;import javax.swing.JButton;import javax.swing.JComboBox;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JPanel;import javax.swing.JScrollPane;import javax.swing.JTabbedPane;import javax.swing.JTextArea;import javax.swing.JTextField;import javax.swing.JToolBar;public class wyhChatRoom extends JFrame implements ActionListener{ private String name; //服务器聊天室的图形用户界面private JComboBox combox; //网名private JTextField text; //输入IP地址或域名的组合框private JTabbedPane tab; //选项卡窗格,每页与一个Socket通信public wyhChatRoom(int port ,String name) throws IOException{super("聊天室"+name+" "+InetAddress.getLocalHost()+"端口:"+port);this.setBounds(320, 240, 440, 240);this.setDefaultCloseOperation(EXIT_ON_CLOSE);JToolBar toolbar=new JToolBar(); //工具栏this.getContentPane().add(toolbar,"North");toolbar.add(new JLabel("主机"));combox=new JComboBox();combox.addItem("127.0.0.1");toolbar.add(combox);combox.setEditable(true);toolbar.add(new JLabel("端口"));text=new JTextField("1251");toolbar.add(text);JButton button_connect=new JButton("连接");button_connect.addActionListener(this);toolbar.add(button_connect);tab=new JTabbedPane(); //选项卡窗口this.setBackground(Color.blue);this.getContentPane().add(tab);this.setVisible(true);=name;while(true){Socket client=new ServerSocket(port).accept();//等待接受客户端的连接申请tab.addTab(name, new TabPageJPanel(client));//tab添加页,页中添加内部类面板tab.setSelectedIndex(tab.getTabCount()-1);//tab指定新页为选择状态port++;}}public void actionPerformed(ActionEvent e){if(e.getActionCommand()=="连接"){String host=(String)combox.getSelectedItem();int port=Integer.parseInt(text.getText());try{tab.addTab(name, new TabPageJPanel(new Socket(host,port)));//连接成功tab添加页tab.setSelectedIndex(tab.getTabCount()-1);//tab指定新页为选中状态}catch(IOException e1){e1.printStackTrace();}}}//面板内部类,每个对象表示选项卡窗格的一页,包含一个Socket和一个线程private class TabPageJPanel extends JPanel implements Runnable,ActionListener{Socket socket;Thread thread;JTextArea text_receiver;//显示对话内容的文本区JTextField text_sender; //输入发送内容的文本行JButton buttons[]; //发送‘离线’删除页按钮PrintWriter cout; //字符输出流对象int index;TabPageJPanel(Socket socket) {super(new BorderLayout());this.text_receiver=new JTextArea();this.text_receiver.setEditable(false);this.add(new JScrollPane(this.text_receiver));JPanel panel=new JPanel();this.add(panel,"South");this.text_sender=new JTextField(16);panel.add(this.text_sender);this.text_sender.addActionListener(this);String strs[]={"发送","离线","删除页"};buttons =new JButton[strs.length];for (int i = 0; i < buttons.length; i++) {buttons[i]=new JButton(strs[i]);panel.add(buttons[i]);buttons[i].addActionListener(this);}buttons[2].setEnabled(false);this.socket=socket;this.thread=new Thread(this);this.thread.start();}@Overridepublic void run() {try {this.cout =new PrintWriter(socket.getOutputStream(),true);this.cout.println(name);//发送自己网名给对方BufferedReader cin=new BufferedReader(new InputStreamReader(socket.getInputStream()));String name=cin.readLine(); //接收对方网名index=tab.getSelectedIndex();tab.setTitleAt(index, name);String aline=cin.readLine();while(aline!=null && !aline.equals("bye")){tab.setSelectedIndex(index);text_receiver.append(aline+"\r\n");Thread.sleep(1000);aline=cin.readLine();}cin.close();cout.close();socket.close();buttons[0].setEnabled(false);//接收方的发送按钮无效buttons[1].setEnabled(false);//接收方的离线按钮无效buttons[2].setEnabled(false);//接收方的删除按钮无效} catch (Exception e) {e.printStackTrace();}}@Overridepublic void actionPerformed(ActionEvent e) {if(e.getActionCommand()=="发送"){this.cout.println(name+"说:"+text_sender.getText());text_receiver.append("我说:"+text_sender.getText()+"\n");text_sender.setText("");}if(e.getActionCommand()=="离线"){text_receiver.append("我离线\n");this.cout.println(name+"离线\n"+"bye");buttons[0].setEnabled(false);buttons[1].setEnabled(false);buttons[2].setEnabled(false);}}}public static void main(String[] args) throws IOException {new wyhChatRoom(2001, "航哥哥");//启动服务端,约定端口,指定网名}}。

本科毕业论文-基于JAVA的聊天系统的设计与实现【范本模板】

本科毕业论文-基于JAVA的聊天系统的设计与实现【范本模板】

摘要随着互联网的快速发展,网络聊天工具已经作为一种重要的信息交流工具,受到越来越多的网民的青睐.目前,出现了很多非常不错的聊天工具,其中应用比较广泛的有Netmeeting、腾讯QQ、MSN-Messager等等。

该系统开发主要包括一个网络聊天服务器程序和一个网络聊天客户程序两个方面。

前者通过Socket套接字建立服务器,服务器能读取、转发客户端发来信息,并能刷新用户列表。

后者通过与服务器建立连接,来进行客户端与客户端的信息交流。

其中用到了局域网通信机制的原理,通过直接继承Thread类来建立多线程。

开发中利用了计算机网络编程的基本理论知识,如TCP/IP协议、客户端/服务器端模式(Client/Server模式)、网络编程的设计方法等。

在网络编程中对信息的读取、发送,是利用流来实现信息的交换,其中介绍了对实现一个系统的信息流的分析,包含了一些基本的软件工程的方法。

经过分析这些情况,该局域网聊天工具采用Eclipse为基本开发环境和java 语言进行编写,首先可在短时间内建立系统应用原型,然后,对初始原型系统进行不断修正和改进,直到形成可行系统关键词:局域网聊天 socket javaAbstractAlong with the fast development of Internet,the network chating tool has already become one kind of important communication tools and received more and more web cams favor. At present, many extremely good chating tools have appeared . for example,Netmeeting, QQ,MSN—Messager and so on. This system development mainly includes two aspects of the server procedure of the network chat and the customer procedure of the network chat。

模拟QQ聊天室需求分析报告(DOC)

模拟QQ聊天室需求分析报告(DOC)

文档名称: 需求分析报告项目名称: 模拟QQ聊天系统项目负责人:班级:学校:1引言1.1 编写目的作为用户与该系统软件开发维护人员共同遵守的软件需求规范说明, 本《软件需求说明书》的主要目的是明确所要开发的软件所应具有的功能、性能, 使系统分析人员和软件设计人员能清楚地了解用户的需求, 并在此基础上进一步提出概要设计和完成后续设计与开发工作, 为软件开发范围、业务处理规范提供依据, 也是应用软件进行合同最终验收的依据。

客户登陆后可以通过服务器转发, 实现一对一和多对多聊天, 闪动托盘图标提示到来信息, 实现呼叫功能, 并播放不同音乐来提示。

系统可以实时显示目前其它用户的状态, 保存并能察看聊天纪录, 并可以申请新的用户号码。

用户登陆成功, 将保存其号码, 以便下次登陆时, 不必再输入而可以直接选择, 显示登陆时间。

服务器端, 向各个客户端发布系统消息。

接受来自客户端的各种信息并分别处理。

自动分配8位用户号码, 并保存该用户, 同时将信息返回给客户端。

用户下线, 将此用户下线消息发给各客户端, 并改写用户在服务器端的状态。

系统易用、美观的图形界面, 可以实现系统托盘。

此外系统还涉与系统数据安全和用户管理的问题、各种代码使用和维护问题、数据安全和数据维护问题、聊天记录和输出等问题, 因此还要求系统具有系统管理和事务处理功能。

总而言之, 要求通过系统的开发, 达到系统项目的总体目标是: 在整个系统的框架下, 结合客户端与服务器端情况的需要实现对数据更新、数据查询、数据统计、数据分析等功能进行有效的管理。

并提供用户友好接口, 满足用户需求的软件。

预期的使用者就是各单位办公区、联系密切的同学朋友与家人、公司同事等, 使用前仔细阅读此软件说明是很必要的, 以便更好的使用、管理和维护此系统!1.2 背景1.待开发软件名称: 模拟QQ聊天工具2.用户: 所有使用QQ的用户。

3、实现软件的单位:4、QQ作为基础的聊天工具, 方便所有计算机用户的交流。

Java课程设计聊天室(含代码)

Java课程设计聊天室(含代码)

Java程序课程设计任务书JAVA聊天室的系统的设计与开发1.主要内容:用JAVA实现基于C/S模式的聊天室系统。

聊天室分为服务器端和客户端两部分,服务器端程序主要负责侦听客户端发来的信息,客户端需要登陆到服务器端才可以实现正常的聊天功能。

2.具体要求(包括技术要求等):系统的功能要求:A.服务器端主要功能如下:1.在特定端口上进行侦听,等待客户端连接。

2.用户可以配置服务器端的侦听端口,默认端口为8888。

3.向已经连接到服务器端的用户发送系统消息。

4.统计在线人数。

5.当停止服务时,断开所有的用户连接。

B.客户端的主要功能如下:1.连接到已经开启聊天服务的服务器端。

2.用户可以配置要连接的服务器端的IP地址和端口号。

3.用户可以配置连接后显示的用户名。

4.当服务器端开启的话,用户可以随时登录和注销。

5.用户可以向所有人或某一个人发送消息。

学习并掌握一下技术:Java JavaBean 等熟练使用一下开发工具:Eclipse, JCreator 等实现系统上诉的功能。

3.进度安排:12月28日 ~ 12月29日:课程设计选题,查找参考资料12月30日 ~ 1月1日:完成系统设计1月2日 ~ 1月5日:完成程序代码的编写1月6日:系统测试与完善1月7日:完成课程设计报告,准备答辩4.主要参考文献:[1].张广彬孟红蕊张永宝.Java课程设计(案例精编)[M].清华大学出版社.2007年版摘要在网络越来越发达的今天,人们对网络的依赖越来越多,越来越离不开网络,由此而产生的聊天工具越来越多,例如,国外的ICQ、国内腾讯公司开发的OICQ。

基于Java网络编程的强大功能,本次毕业设计使用Java编写一个聊天系统。

一般来说,聊天工具大多数由客户端程序和服务器程序外加服务器端用于存放客户数据的数据库组成,本系统采用客户机/服务器架构模式通过Java提供的Soket类来连接客户机和服务器并使客户机和服务器之间相互通信,由于聊天是多点对多点的而Java提供的多线程功能用多线程可完成多点对多点的聊天,数据库管理系统用SQL Server2000完成并通过JDBC-ODBC桥访问数据库。

java聊天工具代码

java聊天工具代码
tamsg.append(exc.toString来自)); } }
else if(pareTo("close")==0) {
try {
DataInputStream is=new DataInputStream(socket.getInputStream());
if(pareTo("start")==0) {
try {
int po=Integer.parseInt(port.getText());
svsocket=new ServerSocket(po);
daemons=new Daemon[MAXUSER];
close.addActionListener(this);
add(panel2,BorderLayout.SOUTH);
tamsg=new TextArea();
tamsg.setBackground(Color.PINK);
tamsg.append("输入你要链接的地址,然后按(link)按钮\n");
}
catch (Exception exc) {
tamsg.append("error happended link\n");
tamsg.append(exc.toString());
}
}
else if(pareTo("id_ok")==0)
DataOutputStream os=new DataOutputStream(socket.getOutputStream());
os.write(strmsg.getBytes());

聊天工具 - 界面及事件处理

聊天工具 - 界面及事件处理

2. 必须有一个名为“Chat”的按钮;
JButton buttonChat = new JButton("Chat");
图1 P2P Chatter
3. 界面效果可有可无; 4. 必须有一个成员是下页的ChatDialog
ChatDialog dialog = null;
2 P2P聊天工具的实现
2.2 实现聊天界面(ChatDialog.java):例如图2 要求:
1. 2. 3. 4. 必须有一个文本框用于显示聊天记录,可以使用
JTextArea msgRecordArea = new JTextArea();
必须有一个文本框用于记录用户的输入;
JTextArea msgSendArea = new JTextArea();
实验09 P2P聊天工具 - 界面事 件处理
实验目的
• 加深对界面编程的理解 • 加深对事件处理于事件响应的理解 • 掌握Jframe、ActionListener、 JTextField/JTextArea和Jbutton的使用方法。
实验内容
• 1. 实现P2P聊天工具的界面 • 2. 实现P2P聊天工具的事件处理与响应功能
必须有一个名为“发送”的按钮;
JButton buttonSend = new JButton("发送");
界面效果可有可无 图2 Chat Dialog
3. P2P聊天工具的事件处理
3.1 实现系统界面的事件处理与响应 要求:当用户点ecordArea.append(…);
2. 清空msgSendArea
msgSendArea.clear();
扩展知识
• 查阅JDK API,获取ScrollPane的使用方法; • 为msgRecordArea增加与QQ类似的消息记录显 示方式。

QQ聊天工具开发文档

QQ聊天工具开发文档

QQ聊天工具开发文档一、设计背景:随着计算机网络日新月异的发展,人们的交流方式越来越多,传统的交流方式,如:信件、电报、电话等已经难以满足人们的交流要求,在互联网上即时的和好友取得联系,已经成为当今社会人们主流的联系方式。

两台计算机之间进行即时通讯、发送文件等交流方式已经成为时代的潮流。

因此出现了QQ、MSN等聊天工具。

QQ作为一款非常使用便捷的聊天工具,用java来实现是可行的。

网络上也出现了各种各样的聊天工具,都是人们自己编写的。

作为一个java初学者来说,我们的QQ聊天工具并不需要拥有各种各样的强大的功能。

基于这样的定位,我们开始设计自己的QQ聊天工具。

二、设计目的:期末设计三、设计思路:一款最基本的聊天工具由几部分组成:图形界面,协议,线程和数据库。

只要掌握这几个方面,编写聊天工具手到擒来。

在我的设计过程中,图形界面采取了比较好用的AWT,因为它方便且易于修改,初学者可以尝试使用,的确是不错的。

至于其他,大抵与其他工具类似,不说也罢。

四、原理流程图操作时先启动服务器(server),然后再启动客户端(client)。

详细说一下服务器的情况:首先输入账号才能查看聊天记录和个人信息。

切换是在聊天记录和服务器信息(如图所示)之间切换。

清空很简单,就是清屏。

服务器中会显示登录信息,谁登陆了,啥时候登陆的。

还可以显示各用户的全部操作,如查看他人资料,发起聊天,传送文件等等。

接下来是启动客户端,即登录。

登录界面:登陆界面做的有点差,还请老师多多包涵啊。

本来想插个图片的,没找的适合的。

账号就是注册时给的号码,密码不用说了。

点击注册后会进入一个界面:在此界面输入自己的个人信息就可以完成注册了。

注册完会有一个号码,就是你的账号。

注册完,输入账号密码,就可以登录进去。

登录后,会出现聊天主体界面:从图中可以看出该界面大体构造和功能。

最上面是用户的头像和一些信息。

中间就是好友界面,功能和QQ有些类似,这里不一一介绍。

制作自己的QQ聊天工具

制作自己的QQ聊天工具

制作自己的QQ聊天工具(1)我们知道网络层的传输协议,主要是TCP和UDP两大协议。

UDP主要信息载体是传送数据包,面向无连接;TCP以三次握手建立数据传输通道,然后数据以字节流形式进行网络传输。

基于这俩哥们的不同特点,我们对他们有着不同的用处。

而网络即时聊天工具,需要传输速度快,对可靠性方面要求并不太高,使用UDP协议完全可以实现。

下面就是一个简单的UDP多线程聊天窗口,可以实现局域网内,多人即时聊天:import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.io.IOException;import .DatagramPacket;import .DatagramSocket;import .InetAddress;import .SocketException;import .UnknownHostException;import java.util.TimerTask;import .*;import javax.swing.*;public class MyTalk{static JTextArea myjt1=new JTextArea();static JTextArea myjt2=new JTextArea();static JButton jb1=new JButton("发送");static DatagramSocket myds2=null;static DatagramSocket myds;public static void main(String[] args) throws Exception{myds=new DatagramSocket(10004);myds2=new DatagramSocket();getTKJF();MyRece mr=new MyRece(myds);Thread mytd2=new Thread(mr);mytd2.start();}// 定义窗体界面public static void getTKJF() throws Exception{JFrame myjf1=null;myjt1.setBounds(10, 20, 200, 150);myjt2.setBounds(10, 213, 200,40);jb1.setBounds(220,220,60,25);myjf1=new JFrame("测试UDP");myjf1.setBounds(200, 200, 300, 300);myjf1.add(myjt1);myjf1.add(myjt2);myjf1.add(jb1);MyTalk.jb1.addActionListener(new HandleTKJB(myds2));myjf1.setLayout(null);myjf1.setVisible(true);}}//创建一个接受消息的线程class MyRece implements Runnable{DatagramSocket myds;public MyRece(DatagramSocket myds){this.myds=myds;}public void run() {try{while(true){byte[] myby1=new byte[1024];DatagramPacket mydp=new DatagramPacket(myby1,myby1.length); myds.receive(mydp);byte[] myby2=mydp.getData();String ip=mydp.getAddress().getHostAddress();String str=new String(myby2,0,mydp.getLength());// getJF();MyTalk.myjt1.append(ip+":"+str+"\n");}}catch(Exception e){JOptionPane.showMessageDialog(null, "信息接收失败!");}}}//消息发送线程class MySend implements Runnable{DatagramSocket myds;public MySend(DatagramSocket myds){this.myds=myds;}public void run(){try{String str1=MyTalk.myjt2.getText();if(!str1.equals("")){byte[] myby1=str1.getBytes();DatagramPacket mydp=newDatagramPacket(myby1,myby1.length,InetAddress.getByName("192.168.45.255"),10004 );myds.send(mydp);MyTalk.myjt2.setText("");}else{JOptionPane.showMessageDialog(null, "所发信息不能为空!");}//myds.close();}catch(Exception e){e.printStackTrace();JOptionPane.showMessageDialog(null, "信息发送失败!");}}}//添加按钮事件,触发消息发送线程class HandleTKJB implements ActionListener{DatagramSocket myds;public HandleTKJB(DatagramSocket myds){this.myds=myds;}public void actionPerformed(ActionEvent e){// try {// myds2=new DatagramSocket();// } catch (Exception e1) {// TODO Auto-generated catch block// e1.printStackTrace();// }// MySend ms=new MySend(myds2);// Thread mytd=new Thread(ms);// mytd.start();if(e.getSource()==MyTalk.jb1){MySend ms=new MySend(myds);Thread mytd=new Thread(ms);mytd.start();}}}为了大家容易看懂,我删除了那些复杂难懂的部分,只保留了一些必要的代码,自己如果真心想做,可以再加添一些界面美化,以及附加功能,比如说文件上传,图片上传,发送表情等等,万变不离其中,道理都差不多。

java简单的聊天窗口代码

java简单的聊天窗口代码

要创建一个简单的Java聊天窗口,您可以使用Java的图形用户界面(GUI)工具包Swing。

以下是一个基本的聊天窗口示例:```javaimport javax.swing.*;import java.awt.*;import java.awt.event.*;public class ChatWindow extends JFrame implements ActionListener {private JTextField inputField;private JTextArea chatArea;private String message = "";public ChatWindow() {super("简单聊天窗口");setSize(400, 300);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);inputField = new JTextField();chatArea = new JTextArea();JButton sendButton = new JButton("发送");sendButton.addActionListener(this);JScrollPane scrollPane = new JScrollPane(chatArea);chatArea.setAutoscrolls(true);getContentPane().add(inputField,BorderLayout.SOUTH);getContentPane().add(sendButton, BorderLayout.EAST); getContentPane().add(scrollPane,BorderLayout.CENTER);}public void actionPerformed(ActionEvent e) {if (e.getSource() == sendButton) {message += inputField.getText() + "\n";chatArea.append(inputField.getText() + "\n");inputField.setText(""); // 清空输入框}}public static void main(String[] args) {ChatWindow chatWindow = new ChatWindow();}}```这个程序创建了一个简单的聊天窗口,用户可以在输入框中输入消息,然后点击"发送"按钮将消息发送到聊天区域。

基于JAVA的仿QQ聊天系统的设计

基于JAVA的仿QQ聊天系统的设计

基于JAVA的仿QQ聊天系统的设计李丹;张师毅【摘要】以 JAVA 技术为核心,利用计算机局域网通信机制原理(例如 TCP/IP 协议、客户端/服务器端模式( C/S 模式)、网络编程设计方法等)完成了一款适合局域网的仿 QQ 聊天系统。

该系统主要由一个聊天服务器端程序和一个聊天客户端程序两块组成。

前者通过 Socket 套接字建立服务器,服务器能读取、转发客户端发来的信息,并能刷新用户列表;后者通过与服务器建立连接来进行客户端与客户端的信息交流。

经测试,系统工作性能稳定,基本能达到聊天功能,并实现了部分附加功能。

%Based on the JAVA technology , this paper uses some techniques of computer local area network communication , such asTCP/IP protocol , client/server model ( C/S ) and network designing method , to complete an imitation QQ chat system suitable for LAN . The system is mainly composed of a chat server program and a chat client program . Through the Socket , the former es-tablishes the server which can read , forward the information to the client , and refresh the list of users . The latter can get a con-nection with the server and then the exchange of information can be made from the client to the client . After testing , the system performance becomes stable , which can achieve the chat function and realized some additional functions .【期刊名称】《微型机与应用》【年(卷),期】2013(000)024【总页数】3页(P11-13)【关键词】即时通信;通信协议;Socket;多线程【作者】李丹;张师毅【作者单位】温州医科大学附属眼视光医院信息中心,浙江温州 325027; 厦门大学软件学院,福建厦门 361005;温州医科大学附属眼视光医院信息中心,浙江温州 325027【正文语种】中文【中图分类】TP311.1随着计算机网络技术的发展,网络聊天工具已经成为人们日常交流的一种重要工具。

自动化测试代码

自动化测试代码

自动化测试代码(附件5)使用java语言对飞秋聊天工具的自动化工具测试多线程,发数据包package com.qiang.socket;import .DatagramPacket;import .DatagramSocket;import .InetAddress;public class CDUFeiQ implements Runnable {public static void main(String[] args) throws Exception {// 使用循环方式/* CDUFeiQ feiq = new CDUFeiQ();for(int i=1; i<=100; i++) {feiq.send("120.94.220.65", "Hello World...");//对方的ip地址,并且飞秋必须打开}*/// 使用多线程方式Runnable request = new CDUFeiQ();for (int i=0; i<10; i++) {Thread thread = new Thread(request);thread.start();}}public void run() {CDUFeiQ feiq = new CDUFeiQ();feiq.send("127.0.0.1", "Hello World...");}public void send(String ip, String message) {try {String ipAddr = ip;//获取对方的ipint port = 2425;//端口String content = "1_lbt4_10#32899#002481627512#0#0#0:1289671407:" +"小舞:Moggie:288:" + message;//你的发送名和信息byte[] buf = content.getBytes("GBK");InetAddress target = InetAddress.getByName(ipAddr);DatagramSocket ds = new DatagramSocket();DatagramPacket dp = new DatagramPacket(buf, buf.length, target, port);ds.send(dp);}catch (Exception ex) {ex.printStackTrace();}}}C语言代码的自动化测试内存1.让内存使用空间每5秒上涨200minclude <stdio.h>include <windows.h>int main (){char *a;while(1){a=(char*)malloc(1000000000);sleep(5000);}}2.内存使用率的波浪图include <stdio.h>include <windows.h>int main (){int i;char *a;while(1){for (i=1;i<=15;i++){a=(char*)malloc(1000000000);sleep(5000);}free(a);}}。

基于CS模式的简单聊天程序(附程序源码)

基于CS模式的简单聊天程序(附程序源码)

基于CS模式的简单聊天程序(附程序源码)基于C/S模式的简单聊天程序(附程序源码)⼀、需求分析设计要求使⽤Socket实现⽹上聊天功能。

⽤户可以通过客户端连接到服务器端并进⾏⽹上聊天。

聊天时可以启动多个客户端。

服务器端启动后,接收客户端发来的⽤户名和密码验证信息。

验证通过则以当前的聊天客户列表信息进⾏响应;此后接收客户端发来的聊天信息,转发给客户端指定的聊天客户(即私聊)或所有其他客户端;在客户断开连接后公告其退出聊天系统的信息。

客户端启动后在GUI界⾯接收⽤户输⼊的服务器端信息、账号和密码等验证客户的⾝份。

验证通过则显⽰当前系统在线客户列表。

客户可以与指定对象进⾏私聊,也可以向系统中所有在线客户发送信息。

实现本程序需要了解⽹络基础知识,掌握C/S结构的⼯作特点,掌握数据结构、⾼级语⾔及⽹络编程知识,可以选择VisualC++、C或Java等语⾔实现。

⼆、设计过程与相关理论程序设计是基于TCP协议,采⽤C/S模式实现简单的⼀对多聊天(群聊)、⼀对⼀聊天(私聊)。

TCP是⼀种可靠的、基于连接的⽹络协议,它是⾯向字节流的,即从⼀个进程到另⼀个进程的⼆进制序列。

⼀条TCP连接需要两个端点,这两个端点需要分别创建各⾃的套接字。

通常⼀⽅⽤于发送请求和数据(在这⾥为聊天的客户端),⽽另⼀⽅⽤于监听⽹络请求和数据(在这⾥为服务端)。

常⽤于TCP编程的有两个类,均在包⾥,这两个类为:Socket、ServerSocket。

关于SocketSocket是建⽴⽹络连接使⽤的,在连接成功时,应⽤程序两端都会产⽣⼀个Socket实例,操作这个实例,完成所需要的对话。

Socket类有多个构造⽅法:(1)public Socket(String host, int port) 创建⼀个流套接字并将其连接到指定主机上。

(2)public Socket(InetAddress address, int port, InetAddress localAddr, int localPort) 创建⼀个流套接字,指定了本地的地址和端⼝以及⽬的地址和端⼝。

简单聊天系统的设计与实现

简单聊天系统的设计与实现

JISHOU UNIVERSITY专业课课程论文简单聊天系统的设计与实现题目:作者:学号:所属学院:信息科学与工程学院专业班级:总评分:完成时间:吉首大学信息科学与工程学院简单聊天系统的设计与实现(吉首大学信息科学与工程学院,湖南吉首 416000)摘要网络聊天室通常直称聊天室,是一种人们可以在线交谈的网络论坛,在同一聊天室的人们通过广播消息进行实时交谈。

在当今信息时代,越来越多的聊天工具被应用,java语言是当今流行的网络编程语言,它具有面向对象,与平台无关,安全,多线程等特点。

使用java语言不仅可以实现大型企业级的分布式应用系统,还能够为小型的的,嵌入式设备进行应用程序的开发。

面向对象的开发是当今世界最流行的开发方法,它不仅具有更贴近自然地语义,而且有利于软件的维护和继承,锻炼我们熟练地应用面向对象的思想和设计方法解决实际问题的能力。

本程序正是用java 语言实现了简单聊天功能。

它是图形界面,线程,流与文件系统等技术的综合应用。

其界面主要采用了java.awt 包,java.swing 包等。

关键词:网络聊天室;java;面向对象;通信机制;图形界面目录第一章引言1第二章关键技术 (2)2.1开发技术 (2)2.1.1什么是Java (2)2.1.2主要特性 (2)2.1.3 Java中的布局 (3)2.2 开发工具 (3)2.2.1 Eclipse (3)2.2.2 SQL Sever数据库 (3)第三章需求分析 (4)3.1可行性分析 (4)3.1.1 经济可行性 (4)3.1.2 操作可行性 (4)3.1.3 技术可行性 (4)3.2功能分析 (4)3.2.1 注册 (4)3.2.2 登录 (5)3.2.3 私聊 (5)第四章概要设计 (6)4.1系统总体结构 (6)4.2数据库设计 (6)第五章详细设计 (8)5.1登录模块设计 (8)5.2注册模块设计 (9)5.3消息格式化设计 (10)5.4 界面设计 (10)5.4.1 登录界面 (10)5.4.2 注册界面 (11)5.4.3 聊天界面 (11)结束语 (12)参考文献...... (123)简单聊天系统的设计与实现第一章引言当今主流的聊天工具有QQ,MSN,网易泡泡等,国内最热门的聊天工具当属腾讯QQ,是由深圳市腾讯计算机系统公司开发的,基于Internet的即时寻呼软件。

JavaSocket实现聊天室附1500行源代码

JavaSocket实现聊天室附1500行源代码

JavaSocket实现聊天室附1500⾏源代码⽬录项⽬需求分析基础分析项⽬部分代码摘要Dao的链表存储实现ServerListenServerReceive再看⼀下客户端的ClientReceive项⽬问题选择框中出现的不是⽤户名服务端点击消息发送按钮没有反应不能显⽰在线⼈数服务端退出时没有消息Java养成计划(打卡第31,2天)内容管理:Sockect聊天室的实现Java界⾯使⽤了各种组件,对于这部分不了解的不⽤担⼼,⽬前掌握⼀个⼤概就OK项⽬需求分析需要完成⼀个简单聊天⼯具的界⾯及功能,实现服务器中转下的多客户端之间的通信,系统完成的功能有程序启动后能看到当前有那些机器上线,可弹出对话聊天框,可以在其中编辑要发送的聊天信息,并进⾏发送⼀旦某个⽹内的机器上线了,可即时通知,并能更新⽤户界⾯的⽤户列表双击某个列表项时,可弹出对话聊天框,可以在其中编辑要发送的信息并发送聊天界⾯⼈性化,下⾯时发送框,上⾯有已有聊天记录,并借助滚动条看到当次所有聊天记录当有⼈向本机器发送消息时,可显⽰⽤户接收到的信息,并且显⽰是谁所发,同时进⾏信息的回复基础分析⾸先这是⼀个聊天⼯具,使⽤的是C/S结构,要模拟就要使⽤net的Scocket和ServerSocket模拟客户端和服务端这⾥综合运⽤了多种知识,已经不再是简单的java SE知识,其中界⾯编程占据主要代码,这⾥可以贴⼏张图看看效果,这是我肝了2天才肝完的,这⾥已经可以实现多态设备的连接分为3个包Sever包主要是服务器的相关代码,主要是实现与⽤户的交互Dao包是模拟的数据库包,存储所有的⽤户信息,实现增删改的操作Client是客户代码包,只要在电脑上运⾏这⾥的代码,就可以出现客户端界⾯,约定好ip和端⼝号就可以通信了。

这⾥就真正实现了客户端型软件,只是软件功能简单,可以使⽤web编程实现另外⼀种架构可以来看⼀下界⾯再来看⼀下客户端和服务端的交流项⽬部分代码摘要Dao的链表存储实现package Dao;/*** 演⽰程序为了简化就不⽤数据库存储,使⽤单链表完成数据库各项功能* 这⾥⼀定要写测试代码检查各项功能是否可⽤* 最开开始我测试了add,del,find功能,却没有测试getCount功能,结果存在问题,后⾯突然放开测试才发现错误 */public class UserLinkList {private Node head;private int count;public boolean addUser(Node client){if(head == null){//头节点也存储数据head = client;count++;return true;}else {Node p = head;for(;p.next != null;p = p.next);{p.next = client;count++;return true;}}}public int getCount() {return count;}public Node findUser(String name){Node p = head;while(p != null )//p.next != null没有包含最后⼀个结点{if(ername.equals(name)){return p;}p = p.next;}return null;}public Node findUser(int index){int pos = 0;Node p = head;while(p != null&& pos < index){p = p.next;pos++;}if(p != null&& pos == index){return p;}return null;}public boolean delUser(Node client){//删除后长度也要减少Node p = head;if(ername.equals(ername)){//删除头结点head = head.next;count--;return true;}while(p != null){//忘记循环了if(ername.equals(ername)){p.next = p.next.next;count--;return true;}p = p.next;}return false;}/*** 这⾥可以设置⼀个显⽰的⽅法,供检查使⽤*/public void display() {Node p = head;int pos = 1;while(p != null){System.out.println("第"+pos + "个⽤户"+ername);p = p.next;pos++;}}}/*public static void main(String[] args) {//经过测试发现没有问题,可以正常使⽤ Node client1 = new Node();ername = "张三";Node client2 = new Node();ername = "李四";Node client3 = new Node();ername = "王五";//其他的就不测试了,反正该项就可以测试了UserLinkList userLinkList = new UserLinkList();//⾃动初始化userLinkList.addUser(client1);userLinkList.addUser(client2);userLinkList.addUser(client3);// userLinkList.display();Node node = userLinkList.findUser(0);userLinkList.delUser(node);userLinkList.display();System.out.println(userLinkList.getCount());}*/现在编写这段代码应当是⾮常简单的,注意⼀定要测试ServerListen简单看⼀下这个监听线程,可以监听⽤户是否上线package Server;/*** @author OMEY-PC*本程序的作⽤是实现服务器侦听的线程化,其中run⽅法通过client = new Node();创建⼀个客户端对象,通过client.socket = server.accept来设定接⼝,通过client.input *output来建⽴输⼊输出流*/import java.io.*;import .*;import Dao.*; //连接数据import javax.swing.*;public class ServerListen extends Thread{ServerSocket server;JComboBox combobox;JTextArea textarea;JTextField textfield;UserLinkList userLinkList;Node client;ServerReceive recvThread;public boolean isStop;/*** 聊天服务端的⽤户上下线侦听类*/public ServerListen(ServerSocket server,JComboBox combobox,JTextArea textarea,JTextField textField,UserLinkList userLinkList) {this.server = server;bobox = combobox;this.textarea = textarea;this.textfield = textField;erLinkList = userLinkList;isStop = false;}@Overridepublic void run() {while(!isStop && !server.isClosed())//没有停⽌服务{try {client = new Node();client.socket = server.accept();//⽤来指代所连接的客户端client.output = new ObjectOutputStream(client.socket.getOutputStream());client.output.flush();client.input = new ObjectInputStream(client.socket.getInputStream());ername = (String)client.input.readObject();//显⽰提⽰信息combobox.addItem(ername);//改成⽤户名userLinkList.addUser(client);textarea.append("⽤户" + ername+"上线"+"\n");textfield.setText("在线⽤户"+ userLinkList.getCount()+"⼈\n");recvThread = new ServerReceive(textarea,textfield,combobox,client,userLinkList);recvThread.start();//启动线程}catch (Exception e) {e.printStackTrace();}}}}ServerReceive该线程实现服务器与⽤户之间的信息交互package Server;/*** @author OMEY-PC*服务器收发消息的类*/import .ServerSocket;import javax.swing.*;import Dao.*;public class ServerReceive extends Thread{JTextArea textarea;//消息展⽰域JTextField textfield;//⽂本输⼊域JComboBox combobox; //复选框Node client;//⽤户UserLinkList userLinkList;public boolean isStop;public ServerReceive(JTextArea textarea, JTextField textfield, JComboBox combobox, Node client,UserLinkList userLinkList) {this.textarea = textarea;this.textfield = textfield;bobox = combobox;this.client = client;erLinkList = userLinkList;isStop = false;}@Overridepublic void run(){//向所有⼈发送⽤户的列表sendUserList();while(!isStop && !client.socket.isClosed()){try {//类型,对谁,状况,⾏为,信息String type = (String)client.input.readObject();if(type.equalsIgnoreCase("聊天信息")){String toSomebody =(String)client.input.readObject();//从客户端接收信息String status = (String)client.input.readObject();String action = (String)client.input.readObject();String message = (String)client.input.readObject();String msg = ername+" "+ action + "对"+ toSomebody +" 说 " + message + "\n";//接收的消息 if(status.equalsIgnoreCase("悄悄话")){msg = "[悄悄话]" + msg; //若为悄悄话,就在前⾯加上标识}textarea.append(msg);if(toSomebody.equalsIgnoreCase("所有⼈")){sendToAll(msg);//这⾥是接受的⽤户消息,和之前的向所有⼈发消息不⼀样}else {//向⽤户发消息try {client.output.writeObject("聊天信息");client.output.flush();//刷新流client.output.writeObject(msg);client.output.flush();}catch (Exception e) {e.printStackTrace();}Node node = userLinkList.findUser(toSomebody);if(node != null){node.output.writeObject("聊天信息");node.output.flush();node.output.writeObject(msg);//向选定信息发送信息node.output.flush();//刷新输出流缓冲区中的信息}}}else if(type.equalsIgnoreCase("⽤户下线")){Node node = userLinkList.findUser(ername);userLinkList.delUser(node);String msg = "⽤户"+ ername +"下线\n";int count = userLinkList.getCount();combobox.removeAllItems();combobox.addItem("所有⼈");int i = 0;while(i < count){node = userLinkList.findUser(i);if(node == null){i++;continue;}combobox.addItem(ername);i++;}combobox.setSelectedIndex(0);//选择第⼀个,所有⼈textarea.append(msg);textfield.setText("在线⽤户"+ userLinkList.getCount() +"⼈\n");sendToAll(msg);sendUserList();//重新发送⽤户列表break;}}catch (Exception e) {e.printStackTrace();}}}/*** 向所有⼈发送消息*/public void sendToAll(String msg){int count = userLinkList.getCount();int i = 0;while(i < count){//给⽤户列表中的每⼀个⼈都发送消息Node node = userLinkList.findUser(i);if(node == null){i++;continue;}try {//输出流node.output.writeObject("聊天信息");node.output.flush();node.output.writeObject(msg);//聊天消息写⼊输出流(to client)node.output.flush();}catch (Exception e) {e.printStackTrace();}i++;}}/*** 向所有⼈发送⽤户列表*/public void sendUserList() {String userList = "";int count = userLinkList.getCount();int i = 0;while(i < count){Node node = userLinkList.findUser(i);if(node == null){i++;continue;}userList += ername;userList += "\n";i++;}i = 0; //给每个⼈发送消息while(i < count){Node node = userLinkList.findUser(i);if(node == null){i++;continue;}try {node.output.writeObject("⽤户列表");node.output.flush();node.output.writeObject(userList);node.output.flush();}catch (Exception e) {e.printStackTrace();}}i++;}}/*** 本程序可以实现通过线程向所有⼈发送消息,⽤户列表,以及向选定的⼈发送聊天消息等,主要是是实现服务端收发消息的线程化,其中sendUserList()发送列表, * client.input.redObject()获取客户端发送到服务端的消息,通sendToAll(),将发送到发送到所有⼈的信息发送到各个客户端*/再看⼀下客户端的ClientReceive该线程是实现客户端与系统之间的信息交互,注解丰富package Client;import java.io.*;import .*;import javax.swing.*;public class ClientReceive extends Thread{private JComboBox combobox;private JTextArea textarea;Socket socket;ObjectOutputStream output;ObjectInputStream input;JTextField showStatus;public ClientReceive(JComboBox combobox, JTextArea textarea, Socket socket, ObjectOutputStream output,ObjectInputStream input, JTextField showStatus) {bobox = combobox;this.textarea = textarea;this.socket = socket;this.output = output;this.input = input;this.showStatus = showStatus;}@Overridepublic void run() {//从服务端获得消息while(!socket.isClosed()){try {String type = (String)input.readObject();//获得流,read读取信息if(type.equalsIgnoreCase("系统信息")){String sysmsg = (String)input.readObject();textarea.append("系统信息" + sysmsg);}else if(type.equalsIgnoreCase("服务关闭")){output.close();input.close();socket.close();textarea.append("服务器已经关闭!\n");break;}else if(type.equalsIgnoreCase("聊天信息")){String message = (String)input.readObject();textarea.append(message);}else if(type.equalsIgnoreCase("⽤户列表")){String userlist = (String)input.readObject();String[] usernames = userlist.split("\n"); //⽤换⾏符分隔combobox.removeAll();//先移出去int i = 0;combobox.addItem("所有⼈");while(i < usernames.length){combobox.addItem(usernames[i]);i++;}combobox.setSelectedIndex(0);showStatus.setText("在线⽤户"+ usernames.length +" ⼈");}}catch (Exception e) {e.printStackTrace();}}}}其余的界⾯的部分就不放出来了,代码太长,每个都有400多⾏,如果有兴趣,就到我的gitee上去浏览,后⾯会放上地址项⽬问题选择框中出现的不是⽤户名查找相应模块发现是因为addItem中添加的时结点,⽽不是结点中的username,修改后正常服务端点击消息发送按钮没有反应查找监听器部分,发现监听器监听该部分代码写错,将button⼜写成sysMessage不能显⽰在线⼈数查找侦听线程,启动客户端发现抛出异常Cannot invoke “javax.swing.JTextField.setText(String)” because “this.textfield” is nulltextfield为空,查找问题源头;发现在构造⽅法中:the assignmen to variable has no effect;这是因为单词拼写错误,编译器并没有报错服务端退出时没有消息系统报错Cannot read field “input” because “node” is null意识到问题出在链表上,系统要求从0开始,⽽链表中的序号是从1开始的,修该链表中的findUser中的pos为0就解决写这个程序写了两天,直接废了~~到此这篇关于Java Socket实现聊天室附1500⾏源代码的⽂章就介绍到这了,更多相关Java Socket内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!。

来客2系统源码

来客2系统源码

来客2系统源码来客2系统简介来客2系统是一款基于Java开发的在线客服系统,主要用于企业和网站提供在线客服服务。

该系统具有实时聊天、多渠道接入、智能机器人等功能,可以帮助企业更好地与客户进行沟通和交流。

系统架构来客2系统采用B/S架构,即浏览器/服务器架构。

前端采用HTML、CSS、JavaScript等技术实现页面的展示和交互,后端采用Java技术实现服务器端的逻辑处理和数据存储。

前端技术栈:- HTML:定义页面结构- CSS:定义页面样式- JavaScript:实现页面交互和动态效果- jQuery:简化JavaScript代码编写- Bootstrap:快速搭建响应式网页设计后端技术栈:- Java:编写服务器端程序- Spring Framework:提供IOC容器、AOP框架等功能- MyBatis:ORM框架,将Java对象映射到数据库表中- Apache Tomcat:Web服务器,提供Servlet容器和JSP引擎系统模块来客2系统主要包含以下几个模块:1. 用户管理模块用户管理模块主要负责处理用户登录、注册、信息修改等操作。

用户可以通过该模块进行账号注册,并且可以修改个人信息以及密码。

2. 客服管理模块客服管理模块主要负责处理客服的登录、注销、状态切换等操作。

客服可以通过该模块进行账号登录,并且可以切换在线、离线等状态。

3. 聊天记录管理模块聊天记录管理模块主要负责处理聊天记录的存储和查询。

系统会将用户和客服之间的聊天记录保存在数据库中,用户和客服可以通过该模块查询历史聊天记录。

4. 智能机器人模块智能机器人模块主要负责处理自动回复功能。

当客户发送消息时,系统会根据预设的规则进行匹配,并自动回复相应的内容,从而提高客户满意度和工作效率。

5. 多渠道接入模块多渠道接入模块主要负责处理来自不同渠道的用户请求。

系统支持多种接入方式,包括网站嵌入、微信公众号等,从而满足不同企业和网站的需求。

java网络聊天室课程设计报告(内附代码)

java网络聊天室课程设计报告(内附代码)

课程设计网络聊天室院(系) 别信电学院班级计算102学号姓名指导教师时间2013-4-18—2013-5-10 课程设计任务书题目网络聊天室课程设计系(部) 信电学院专业计算机科学与技术班级计算102学生姓名学号4 月18 日至5 月10 日共 4 周指导教师(签字)系主任(签字)年月日成绩评定表目录课程设计概述 (3)1.1问题描述 (3)1.2功能需求分析 (3)1.3环境需求分析 (3)学生信息管理系统软件总体设计 (4)2.1整体思路 (4)2.2总体设计流程图 (5)学生信息管理软件详细设计 (6)3.1.界面设计 (6)3.2通信功能实现方法 (8)参考文献 (44)摘要私達の実践の能力を高めるため、学んだ知識を運用することができて行って更に創造して、学校は特に2週間手配して、私達にVisual C++の課程の設計の実習を行わせます.このファイルの詳しい説明はVisual C++6.0環境の下で、1つのソフトウェアの過程を設計して、このソフトウェアは各種のデータの個数を統計したのです。

このソフトウェアの機能は、ユーザーは1段の文字を入力して、ソフトウェアは文字の中の各類のデータの数を記録して、英文のデータの数、数字のデータの数、空欄のデータの数とそれのタイプのデータの数を含んで、そしてそれらを明らかに示します.以下、課程を通して説明を設計して、データはソフトウェアの説明を統計して、プログラムは説明を調整して、総括などの方面を開発して、詳しくこのプログラムの製作の過程を説明して、作用、各種の実行することができる操作.关键字:データの統計,VC++6.0, ヘッドファイル课程设计概述1.1问题描述`随着计算机网络日新月异的发展,人们的交流方式越来越多,传统的交流方式,如:信件、电报、电话等已经难以满足人们的交流要求,在互联网上即时的和好友取得联系,已经成为当今社会人们主流的联系方式。

因此,两台计算机之间进行即时通讯、发送文件等交流方式已经成为必然潮流。

JAVA聊天程序设计代码及报告

JAVA聊天程序设计代码及报告

一.系统需求分析网络聊天室通常直称聊天室;是一种人们可以在线交谈的网络论坛;在同一聊天室的人们通过广播消息进行实时交谈..在当今信息时代;越来越多的聊天工具被应用;java语言是当今流行的网络编程语言;它具有面向对象;与平台无关;安全;多线程等特点..使用java语言不仅可以实现大型企业级的分布式应用系统;还能够为小型的的;嵌入式设备进行应用程序的开发..面向对象的开发是当今世界最流行的开发方法;它不仅具有更贴近自然地语义;而且有利于软件的维护和继承;锻炼我们熟练地应用面向对象的思想和设计方法解决实际问题的能力..本程序正是用java语言实现了简单聊天功能..它是图形界面;线程;流与文件系统等技术的综合应用..其界面主要采用了java.awt包;java.swing包等..二.系统总体设计1.对性能的规定由于本软件知识一个聊天程序;程序只提供用户之间的聊天功能;故对网络传输数据要求不是很高;只要正常的传输速度就可以了..2数据管理IP地址IP;端口Port3.开发环境本软件采用Java语言编写;Java语言是一种跨平台的编程语言;所以本软件对操作系统没有特别的要求..而网络传输方面采用TCP/IP网络传输协议或者是RMI..4.设计概要1本软件客户端与用户共用一段程序..客户端编译运行后;在窗口选择----侦听..用户编译运行后;在窗口选择----连接..2本软件实现的功能有1允许服务器侦听客户端;客户端连接到服务器2允许服务区与客户端之间进行聊天;3允许服务器与客户端更改背景颜色;4 允许服务器与客户端更改字体颜色;5服务器与客户端时;会显示内容发送时间;6允许服务器与客户端用鼠标点击“发送”;按ENTER键均可发送内容7允许服务器与客户端用鼠标点击关闭时关闭聊天窗口三.系统详细设计1.代码功能描述1程序中引入的包:import java.awt.;import java.awt.event.;import javax.swing.;import java.;import java.io.;2代码中自定义的类:类名:chatHouse继承的类:JFrame实现的接口:ActionListener; Runnable作用:构造服务器界面以及客户端界面..定义的对象: TextArea ta;JTextField ip;JTextField port;JButton btn_server;JButton btn_client;JButton btn_backGroundCol;JButton btn_fontCol;JTextField send_text;JButton btn_send;JButton btn_close;JLabel pic;Socket skt;构造方法:public chatHouse主要成员方法:public void runpublic void actionPerformedActionEvent epublic void doServerpublic void doSend2.源代码chatHouse.javaimport java.awt.;import java.awt.event.;import javax.swing.;import java.;import java.io.;import java.util.;public class chatHouse extends JFrame implements ActionListener; Runnable{private TextArea ta;private JTextField ip;private JTextField port;private JButton btn_server;private JButton btn_client;private JButton btn_backGroundCol;private JButton btn_fontCol;private JTextField send_text;private JButton btn_send;private JButton btn_close;private JLabel pic;private Socket skt;public void run{try{BufferedReader br = new BufferedReadernew InputStreamReaderskt.getInputStream;whiletrue{String s = br.readLine; // 从网络读ifs==null break;ta.appends + "\n";}}catchException e{e.printStackTrace;}}public void actionPerformedActionEvent e{ife.getSource==btn_server{doServer;}ife.getSource==btn_client{doClient;}ife.getSource==btn_send{doSend;}}public void doServer{try{ServerSocket server = newServerSocketInteger.parseIntport.getText;skt = server.accept;ta.append"连接成功\n";new Threadthis.start;}catchException e{ta.append"服务器启动失败\n";}}public void doClient{try{skt = new Socketip.getText; Integer.parseIntport.getText;ta.append"连接成功\n";new Threadthis.start;}catchException e{ta.append"连接失败\n";}}public void doSend{Calendar c=Calendar.getInstance;int y=c.getc.YEAR;int M=c.getc.MONTH+1;int d=c.getc.DAY_OF_MONTH;int h=c.getc.HOUR_OF_DAY;int mm=c.getc.MINUTE;int ss=c.getc.SECOND;try{PrintWriter pw = new PrintWriterskt.getOutputStream;String s = send_text.getText;ifs==null return;ta.appendy+"-"+M+"-"+d+" "+h+":"+mm+":"+ss+"\n";ta.appends+"\n";pw.printlny+"-"+M+"-"+d+" "+h+":"+mm+":"+ss;pw.printlns;pw.flush;send_text.setText"";}catchException e{ta.append"发送失败\n";}}public chatHouse{super"聊天室";this.setBounds100;100;550;430;Container cc = this.getContentPane;JPanel p1 = new JPanel;cc.addp1; BorderLayout.NORTH;JPanel p2 = new JPanel;cc.addp2;BorderLayout.CENTER;JPanel p3 = new JPanel;cc.addp3;BorderLayout.SOUTH;pic=new JLabelnew ImageIcon"12.gif";cc.addpic;BorderLayout.EAST;p1.addnew JLabel"IP: ";ip = new JTextField"127.0.0.1"; 10;p1.addip;p1.addnew JLabel"Port: ";port = new JTextField"7777"; 4;p1.addport;btn_server = new JButton"侦听";p1.addbtn_server;btn_client = new JButton"连接";p1.addbtn_client;btn_backGroundCol =new JButton"背景色";p1.addbtn_backGroundCol;btn_fontCol =new JButton"字体颜色";p1.addbtn_fontCol;p2.setLayoutnew BorderLayoutta = new TextArea;p2.addta; BorderLayout.CENTER;send_text = new JTextField"Hello.";p2.addsend_text; BorderLayout.SOUTH;btn_send = new JButton"发送";p3.addbtn_send; BorderLayout.WEST;btn_close =new JButton"关闭";p3.addbtn_close; BorderLayout.CENTER;//---------------------------------------"关闭"按钮监听器 btn_close.addActionListenernew ActionListener{public void actionPerformedActionEvent e{System.exit100;}};//--------------------------------------- 背景变色监听btn_backGroundCol.addActionListenernew ActionListener{public void actionPerformedActionEvent e{JColorChooser chooser4=new JColorChooser;Color color=chooser4.showDialognull;"背景颜";Color.yellow; ta.setBackgroundcolor;}};//---------------------------------------字体变色监听btn_fontCol.addActionListenernew ActionListener{public void actionPerformedActionEvent e{JColorChooser chooser4=new JColorChooser;Color color=chooser4.showDialognull;"字体颜色";Color.black; send_text.setForegroundcolor;ta.setForegroundcolor;}};//---------------------------------------按ENTER键可发送监听btn_server.addActionListenerthis;btn_client.addActionListenerthis;btn_send.addActionListenerthis;setDefaultCloseOperationJFrame.EXIT_ON_CLOSE;send_text.addKeyListenernew KeyAdapter{public void keyPressedKeyEvent e{ife.getKeyCode==KeyEvent.VK_ENTERdoSend;}};}public static void mainString args{new chatHouse.setVisibletrue;}}import java.util.;3.程序测试编译运行程序后;先选择对方IP;选择同样的Port..服务器先侦听;客户端再连接..连接成功;窗口会显示“连接成功”字样..接下来就可以聊天了..1 服务器与客户端聊天..2服务器与客户端聊天..服务器将背景颜色设为粉红;字体颜色设为蓝色.. 客户端将背景颜色设为蓝色;字体颜色设为红色..四.小结1.通过本次课程设计;使得自己懂得理论和实践相结合起来;从理论中得出结论;才能真正掌握这门技术;也提高了自己独立思考的能力;在设计的过程中;可以自己解决..真正体会到要将一门知识学的更深入;必须加强实践;多练习;才能发现问题所在..2..本程序实现的功能还比较简单不够完善;从中;我知道了自己的不足之处;决心增长自己的知识;设计更加好的程序;实现各种更加复杂的功能;如:传输文件;图片..以及登陆界面;昵称等..3.总的来说;这次实训对我很有帮助..让我学会了的不只是设计JAVA聊天室;更让我学会主动学习;而不是被动接收..这样才能更好的运用自己所学到的知识..另:附该代码所用到的图片 12.gif。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

v1.0可编辑可修改源代码项目 QQClientProject:LoguiGui 代码 :package class LoguiGui extends {public LoguiGui() {initComponents();}public Socket connectServer() {Socket s = null;try {s = new Socket("", 6666);} catch (Exception e){ ();}return s;}private void jButton1ActionPerformed evt) {quals(name)) {(this, "用户名不能为空, 请输入 ", "异常提示", ;return;}String pwd = new String());"密码: " + pwd);if () == 0) {v1.0可编辑可修改(this, "密码不能为空,请输入", "异常提示", ;return;}final Socket s = ();endMsg(msg, s);eceiveMsg(s);etVisible(true);}});();} else {(this, "登录失败:" + r, "异常提示", ;}private void jLabel3MouseClicked evt) {etVisible(true);}});}RegiterGui代码:package class RegiterGui extends {private static final String url = "jdbc:odbc:mydata";private static final String user = "mzz";v1.0可编辑可修改private static final String pwd = "mzz";public Socket connectServer() {Socket s = null;try {s = new Socket("", 6666);} catch (Exception e){ ();}return s;}private void jButton1ActionPerformed evt){ quals(name)) {(this, " 用户名不能为空 , 请输入 ", " 异常提示 ", ;return;}if == 0) {(this, " 密码不能为空 , 请输入 ", " 异常提示 ", ;return;}if == 0) {(this, " 密码不能为空 , 请确认 ", " 异常提示 ", ;return;}if (!(pwd0, pwd2)) {(this, " 密码输入错误 , 请重新输入 ", " 异常提示 ", ;return;v1.0可编辑可修改}String sex = null;if ()) {sex = ();"性别: " +sex); } else if ()){ sex = ();"性别: " +sex); } else if ()){ sex = ();"性别: " + sex);}String hobby =null;if ()) {hobby = ();"爱好: " +hobby); } else if ()){ hobby = ();"爱好: " +hobby); } else if ()){ hobby =();"爱好: " + hobby);}String birth = () + "年" + "" + () + "月";" 生日: " + birth);String city = (String) ());"城市 :" + city); Stringprofession = ();"职业 :" + profession);Socket s = ();endMsg(msg, s);eceiveMsg(s);tart();}public JList getUsersListItem() {return usersListItem;}public void setUsersChatItem(String usersChat) { String s= void addUsers(List<User> list) { DefaultListModel dlm = (DefaultListModel) ();for (User u : list) {(u);}}public void addNewUser(User u) { DefaultListModel dlm = (DefaultListModel) (); (u);}public void delUser(User curu) {DefaultListModel dlm = (DefaultListModel) ();(curu);}private void formWindowClosing evt) {endMsg(msg, s);(0);quals(text)) {(this, "发送内容不能为空,请输入", "异常提示", ;return;}User[] CUser=new User[MAXUSER];String UsersName;int i=0;Object[] listname =();if==0){(this, "请在在线好友中选择你要聊天的好友", "异常提示", ;return;}for(Object a:()){CUser[i]=(User)a;i++;}int j=0;UsersName=CUser[j].getUserName();j++;for(;CUser[j]!=null;j++){UsersName=UsersName+","+CUser[j].getUserName();}String UsersText="\n"+" 您向 "+UsersName+"发送消息: \n"+"\n"; chat2=new Message(4,u,CUser,text); ().sendMsg(chat2, s); (null);}private void scriptMouseClicked evt) {eceiveMsg(s);etUserName();String s=().getUserName()+"向您发送信息:\n"+()+"\n"; (s);}else if()==5){tart();}}catch(Exception e){();}}}ServerWorker 代码:package qqserverproject;import class ServerWorker extends Thread { eceiveMsg(s);endMsg(msg1, s);}else if () == 1) {endMsg(msg1, s);if (result == null) {endMsg(msg2, s);endMsg(newUserMsg, curS);}endMsg(user2, curS);i++;}while()[i]!=null);}else if () == 5) {endMsg(msg, curs);}break;}else {"消息类型不正确 ");}}}private String register(User u) {sUserExits())) {return "用户名已被使用";}oRegister(u)) {return null;} else {return "注册失败,请联系管理员"; }}private String Logui(User u) { sUserExits())) {return "用户名不存在,请注册"; }oLogui(u)) {return null;//注册成功,返回空} else {return "密码错误";}}}。

相关文档
最新文档