聊天室程序

合集下载

网络课设

网络课设

课程设计Ⅲ设计说明书用VC++6.0的Sockets API实现一个聊天室程序学生姓名高虹学号1118042026班级专升本1101成绩指导教师薛燕红数学与计算机科学学院2012年1月11日课程设计Ⅲ课程设计评阅书课程设计任务书2011 —2012学年第1 学期专业:计算机科学与技术学号:1118042026 姓名:高虹课程设计名称:计算机网络课程设计设计题目:用VC++6.0的Sockets API 实现一个聊天室程序完成期限:自2012 年 1 月 3 日至2012 年 1 月14 日共 2 周设计依据、要求及主要内容(可另加附页):一、课题背景:随着计算机信息技术的飞速发展,互联网与人类社会的工作、生活越来越紧密相关,它已经成为人类获取、交流信息的重要途径和手段。

网络编程已经成为软件开发的一个重要的研究领域。

本文利用Sockets API编写一个C/S通信网络应用程序,以实现聊天室的基本功能。

1.VC++网络编程及Windows Sockets API简介VC++对网络编程的支持有socket支持,WinInet支持,MAPI和ISAPI支持等。

其中,Windows Sockets API是TCP/IP网络环境里,也是Internet上进行开发最为通用的API。

最早美国加州大学Berkeley分校在UNIX下为TCP/IP协议开发了一个API,这个API就是著名的Berkeley Socket接口(套接字)。

在桌面操作系统进入Windows时代后,仍然继承了Socket方法。

在TCP/IP网络通信环境下,Socket数据传输是一种特殊的I/O,它也相当于一种文件描述符,具有一个类似于打开文件的函数调用-socket()。

可以这样理解:Socket实际上是一个通信端点,通过它,用户的Socket程序可以通过网络和其他的Socket应用程序通信。

Socket存在于一个"通信域"(为描述一般的线程如何通过Socket进行通信而引入的一种抽象概念)里,并且与另一个域的Socket交换数据。

用VB实现聊天讨论室和点对点会话

用VB实现聊天讨论室和点对点会话

用VB实现聊天讨论室和点对点会话【摘要】本文将介绍如何使用VB实现聊天讨论室和点对点会话功能。

我们会详细讨论如何实现聊天室功能,包括如何创建聊天室、发送消息和接收消息等。

接下来,我们会介绍如何实现点对点会话功能,即两个用户之间的私密聊天。

然后,本文会讨论程序的设计和实现细节,包括用户界面设计和网络通信实现。

我们会总结本文的内容,并展望未来发展方向。

通过本文的学习,读者将了解如何利用VB语言来实现聊天功能,并可以根据本文中的实现方式进行相应的开发和应用。

【关键词】- VB- 聊天讨论室- 点对点会话- 程序设计- 用户界面设计- 网络通信实现- 总结- 未来发展展望1. 引言1.1 背景介绍聊天室和点对点会话是网络通信中常见的功能,可以让用户实现即时的文字交流和沟通。

随着互联网的普及和发展,人们越来越需要方便快捷的沟通工具来进行交流和交友。

开发一个基于VB的聊天讨论室和点对点会话程序是非常有必要的。

通过这样的程序,用户可以实时发送和接收消息,与他人进行交流,分享信息和想法。

实现聊天讨论室和点对点会话功能不仅可以满足用户的实时通讯需求,还可以帮助开发者提升编程能力和实践技能。

随着技术的不断进步,这样的程序也有着广阔的发展前景和应用场景。

2. 正文2.1 实现聊天讨论室功能我们需要建立一个服务器来作为聊天讨论室的中心。

这个服务器负责接受用户的连接请求,管理用户之间的消息交流。

当用户登录到聊天讨论室时,服务器需要将用户的消息发送给其他在线用户。

服务器还需要保存所有用户的聊天记录,以便用户可以查看历史消息。

我们需要实现用户之间的消息发送和接收功能。

用户可以通过客户端软件向服务器发送消息,在服务器上经过处理后再转发给目标用户。

用户可以选择在聊天室中发言,也可以私聊某个特定的用户。

这样就实现了用户之间的即时通讯功能。

为了提高聊天讨论室的用户体验,我们可以加入一些额外的功能,如消息提醒、表情符号、文件传输等。

这些功能可以让用户更加方便地进行交流,增强用户的参与感和互动性。

linux下聊天室课程设计

linux下聊天室课程设计

linux下聊天室课程设计一、课程目标知识目标:1. 掌握Linux操作系统的基本命令和操作方法;2. 了解网络编程的基本概念,掌握套接字编程的基础知识;3. 学会使用Linux下的C语言编写简单的聊天室程序。

技能目标:1. 能够熟练运用Linux命令行操作,进行基本的文件管理和网络配置;2. 能够运用所学网络编程知识,独立设计并实现一个简单的聊天室程序;3. 提高问题解决能力,能够分析和解决聊天室程序中遇到的问题。

情感态度价值观目标:1. 培养学生对Linux操作系统的兴趣和热情,激发探索操作系统的欲望;2. 培养学生团队协作意识,学会与他人共同解决问题;3. 增强学生的网络安全意识,养成安全使用网络的良好习惯。

分析课程性质、学生特点和教学要求:1. 课程性质:本课程属于信息技术学科,以实践操作为主,理论讲解为辅;2. 学生特点:学生处于高年级阶段,已具备一定的编程基础和计算机操作能力;3. 教学要求:注重理论与实践相结合,培养学生的动手能力和实际操作能力。

二、教学内容1. Linux操作系统基本命令与操作:文件管理、目录操作、文本编辑等;教材章节:第一章 Linux操作系统基础;进度安排:2课时。

2. 网络编程基本概念:TCP/IP协议、套接字编程等;教材章节:第二章 网络编程基础;进度安排:3课时。

3. C语言网络编程:socket函数、bind函数、listen函数、accept函数、send函数、recv函数等;教材章节:第三章 C语言网络编程;进度安排:4课时。

4. 聊天室程序设计:客户端与服务器端程序设计,多线程实现;教材章节:第四章 聊天室程序设计;进度安排:5课时。

5. 聊天室程序调试与优化:程序调试技巧,性能优化方法;教材章节:第五章 聊天室程序调试与优化;进度安排:2课时。

6. 课程总结与拓展:总结所学知识,探讨聊天室程序在实际应用中的改进与拓展;教材章节:第六章 课程总结与拓展;进度安排:1课时。

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, "航哥哥");//启动服务端,约定端口,指定网名}}。

20款网页聊天工具比下载一个聊天程序简单多了

20款网页聊天工具比下载一个聊天程序简单多了

20款网页聊天工具,比下载一个聊天程序简单多了!因为要做一个网上聊天室,网上搜罗了一下,有些是网站程序,这些只要输如以下代码甚至只要一个不存在的网址即可!Meebo 称得上网页聊天的元老,有几十种国家语言版本,能很好的支持中文。

支持AIM、Yahoo!、MSN、Google Talk、ICQ以及Jabber。

用户可自定义Widget的标题和联系人名称,大小和颜色。

网址:/ ebuddy 2003年就推出了网页式聊天。

支持的IM包括MSN、AIM、Yahoo、GTalk、ICQ 以及Myspace。

另外,如果你的手机设备支持xHTML或者WAP ,就可以利用eBuddy的移动版本进行聊天了。

如手机访问就可通过ebuddy登陆msn 了。

网址:/ radiusIM 基于Ajax技术构建的在线web聊天服务,试用感觉不是很稳定,速度也比较慢.。

支持的IM: Yahoo, AIM, MSN 以及GTalk。

radiusIM会自动检测你的地址位置,并在radiusIM中置入Google Map标识这个位置。

通过拖拉Google Map,你能发现在地图中标注出来的各地会员。

如果你想去某个城市旅游,通过radiusIM的地图找位会员先了解情况倒是不错的方法。

网址:/ 会将读者的聊天信息发送到博客作者或者网站管理员的即时通信软件。

几乎支持所有网站程序(例如WordPress、blogger、Facebook等)以及多国家和地区语言,支持ichat、adium、Jabber与Google Talk等即时聊天软件,并且具有很好的可定制性。

博客作者或者网站管理员最多可同时与5名读者交流。

值得一提的是,会在用户第一次打开聊天窗口时就和服务器建立Session和Cookie,以确保用户在关闭浏览器以后下次再次访问该站点时仍然能够收到站长回复的消息。

详细介绍网址:/ Toksta 是一款包括文字、语音及视频的网页聊天工具。

网络程序设计考试大作业

网络程序设计考试大作业
ﻩﻩ//连接上就让HandleSocket去处理
ﻩﻩﻩﻩnewThread(hs)、start();
ﻩﻩﻩ}
ﻩ}catch(IOExceptione){
ﻩSystem、out、println(”客户连接服务器失败”);
ﻩ}
ﻩ}
}
ﻩ//内部类处理一个Socket,接收一个Client发送过来得消息,并且服务器原封不动得返回给所有客户端,客户端对消息进行过滤
ﻩﻩSocketclient=clientConnection、get(i);
ﻩﻩOutputStreamos=client、getOutputStream();
ﻩPrintStreamps=newPrintStream(os);
ﻩﻩﻩﻩps、println(s);
ﻩﻩﻩﻩ}
ﻩﻩ}while(flag);
网络程序设计考试大作业
题目:聊天室程序
班级:
学号:
姓名:
成绩:
网络程序设计考试大作业ﻩ1
二。 程序设计思想及程序设计流程框图ﻩ3
三.主要代码及代码运行结果ﻩ4
1、启动服务器ﻩ4
2、登录ﻩ6
3、注册ﻩ10
4、 登录与注册判定ﻩ12
5、进入聊天界面ﻩ13
6、私聊页面17

背景:根据现在最流行得聊天工具QQ,模仿一部分主要功能来完成.
ﻩﻩﻩInputStreamis=client、getInputStream();
ﻩInputStreamReaderisr=newInputStreamReader(is);
ﻩBufferedReaderbr=newBufferedReader(isr);
ﻩﻩSystem、out、println(”第"+clientNum+”个客户端连接进入服务器");

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桥访问数据库。

网络程序设计考试大作业

网络程序设计考试大作业

网络程序设计考试大作业题目: 聊天室程序班级:学号:姓名:成绩:网络程序设计考试大作业 (1)一. 所使用的背景知识、主要函数的描述 (3)二. 程序设计思想及程序设计流程框图 (3)三. 主要代码及代码运行结果 (4)1.启动服务器 (4)2.登录 (6)3.注册 (10)4.登录和注册判定 (12)5.进入聊天界面 (13)6.私聊页面17一. 所使用的背景知识、主要函数的描述背景:根据现在最流行的聊天工具QQ, 模仿一部分主要功能来完成。

主要函数:public class Server;服务器的创建。

public class Client;客户端的创建。

public class UserInformation;用户信息的保存和验证。

二. 程序设计思想及程序设计流程框图设计思想:利用socket与server socket在客户端与客户端之间的通信, InputStream InputStreamReader输入输出流进行信息的发送与接收。

程序设计流程:主页面: 输入账号与密码, 点击登录或者注册进入下一页面。

登录:判定是否正确, 正确则进去聊天界面。

注册: 进去注册界面, 成功则返回主页面。

进入聊天室: 能发送信息让在线的所有人看到。

私聊界面:能与一个人单独聊天, 信息只能被双方看到。

三. 主要代码及代码运行结果1.启动服务器代码:public class Server {ServerSocket server ;static int clientNum = 0;// 存放与服务器连接上的对应的Socket, 作用是保存服务器与客户端之间的流, 便于服务器给每个客户端进行回发消息List<Socket> clientConnection = new ArrayList<Socket>();public Server() {try {server = new ServerSocket(9999);System.out .println("服务器已经启动");} catch (IOException e ) {e .printStackTrace();System.out .println("服务器启动失败");}}// 内部类, 监听客户端是否有连接到服务器, 并将此客户端的Socket传递给HandleSocket进行处理, 同时将client存放到List中, 即clientConnection中class SocketListener implements Runnable {public void run() {Socket client;try {while (true) {client = server.accept();// 连接上一个就压入List中, 即clientConnection中clientConnection.add(client);HandleSocket hs = new HandleSocket(client);// 连接上就让HandleSocket去处理new Thread(hs).start();}} catch (IOException e) {System.out.println("客户连接服务器失败");}}}// 内部类处理一个Socket,接收一个Client发送过来的消息, 并且服务器原封不动的返回给所有客户端, 客户端对消息进行过滤class HandleSocket implements Runnable {Socket client;HandleSocket(Socket client) {this.client = client;}public void run() {try {clientNum++;// 启用输入流InputStream is = client.getInputStream();InputStreamReader isr = new InputStreamReader(is);BufferedReader br = new BufferedReader(isr);System.out.println("第" + clientNum + "个客户端连接进入服务器");boolean flag = true;String s;do {// 对用户发来的消息进行群发给客户端s = br.readLine();System.out.println("接受到一个客户端消息: " + s);for (int i = 0; i < clientConnection.size(); i++) {Socket client = clientConnection.get(i);OutputStream os = client.getOutputStream();PrintStream ps = new PrintStream(os);ps.println(s);}} while (flag);client.close();} catch (IOException e) {System.out.println("有一个客户断开与服务器的连接");}}}界面:2.登录代码:package com.qq.main;import java.awt.Color;import java.awt.Dimension;import java.awt.Toolkit;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JOptionPane;import javax.swing.JPasswordField;import javax.swing.JTextField;import com.qq.regist.Regist;import erInformation;/*** 主界面*/public class Main extends JFrame {//组件的内容private JLabel userId;private JLabel userPassword;private JTextField inputId;private JPasswordField inputPassword;private JButton btLogin;private JButton btRegist;Main() {userId = new JLabel("帐号");userPassword = new JLabel("密码");inputId = new JTextField(6);inputPassword = new JPasswordField();btLogin = new JButton("登陆");btRegist = new JButton("注册");// 设置窗体属性Toolkit tk = Toolkit.getDefaultToolkit();Dimension screenSize = tk.getScreenSize();//得到当前屏幕的长和宽int x = (int) screenSize.getWidth();int y = (int) screenSize.getHeight();this.setBounds((x - 240) / 2, (y - 600) / 2, 240, 600);//窗口显示的大小 , 位置this.setResizable(false);//窗口大小不能改变this.setLayout(null);//默认的格式this.setBackground(Color.BLACK);// 窗口的颜色this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//退出程序// 设置JLabel属性userId.setBounds(30, 160, 40, 20);userPassword.setBounds(30, 200, 40, 20);// 设置文本域属性inputId.setBounds(90, 160, 100, 20);inputPassword.setBounds(90, 200, 100, 20);inputPassword.setEchoChar('*');//用*显示代替你输入的密码// 设置JButton属性btLogin.setBounds(50, 240, 60, 20);btRegist.setBounds(120, 240, 60, 20);// 注册“登陆”按钮监听器btLogin.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {UserInformation user = new UserInformation();String userName = inputId.getText();String userPassword = new String(inputPassword.getPassword());if (userName.equals("")) {JOptionPane.showMessageDialog(null, "用户名不能为空");} else if ("".equals(userPassword)) {JOptionPane.showMessageDialog(null, "密码不能为空");} else if (user.isExist(userName)&& erInfomation.getProperty(userName).equals(userPassword)) {new AllTalkFrame(userName).setVisible(true);// 判断成功后new一个群聊窗口Main.this.dispose();} else {JOptionPane.showMessageDialog(null, "此用户名不存在或者密码不正确");}}});// 注册“注册”按钮监听器btRegist.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {new Regist();//注册页面}});this.add(userId);this.add(userPassword);this.add(inputId);this.add(inputPassword);this.add(btLogin);this.add(btRegist);this.setVisible(true);}public static void main(String[] args) {new Main();}}界面:3.注册代码:// 注册“提交”按钮的监听器btSubmit.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {String userName = inputId.getText();String userPassword = newString(inputPassword.getPassword());String userPasswordConfirm= new String(inputPasswordConfirm.getPassword());System.out.println("您点击了提交按钮");if (userName.equals("")) {JOptionPane.showMessageDialog(null, "用户名不能为空");} else if ("".equals(userPassword)|| "".equals(userPasswordConfirm)) {JOptionPane.showMessageDialog(null, "密码和密码重复都不能为空");} else if (!userPassword.equals(userPasswordConfirm)) {JOptionPane.showMessageDialog(null, "密码和密码重复不一致");} else {UserInformation user = new UserInformation();if (user.isExist(userName)) {JOptionPane.showMessageDialog(null, "此用户名已存在");} else {JOptionPane.showMessageDialog(null, "注册成功");user.insert(userName,userPassword);//UserInformation类Regist.this.dispose();}}}});// 注册“取消”按钮的监听器btCancel.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {System.out.println("您点击了取消按钮");Regist.this.dispose();}});界面:4.登录和注册判定代码://注册一个用户public void insert(String userName, String userPassword) { try {userInfomation = new Properties();InputStream is;OutputStream os;is = new ("c:/userInfo.properties");os = new ("c:/userInfo.properties", true);userInfomation.load(is);// 将用户名和密码存储到内存中userInfomation.setProperty(userName, userPassword);// 将用户名和密码保存到文件中userInfomation.store(os, null);} catch ( e1) {System.out.println("文件userInfo.properties没有找到 ");} catch (IOException e) {System.out.println("写 userInfo.properties 出错");}}//判断此用户名是否存在public boolean isExist(String userName) {try {userInfomation = new Properties();InputStream is;is = new ("c:/userInfo.properties");userInfomation.load(is);if (userInfomation.containsKey(userName)) {return true;}} catch ( e1) {System.out.println("文件userInfo.properties没有找到 ");} catch (IOException e) {System.out.println("写 userInfo.properties 出错");}return false;}5.进入聊天界面代码:class showOldMessageThread implements Runnable {public void run() {boolean flag = true;while (flag) {try {// 接收群聊服务器端回发过来的消息String serverOutput = client.br.readLine() + "\r\n";if (!serverOutput.startsWith("私聊")&& !serverOutput.startsWith("*")&& !(serverOutput.substring(serverOutput.indexOf(": ") + 1).equals("\r\n"))) {String s1 = serverOutput.replace('说', ' ');String s = s1.replaceAll("�", "\r\n ");oldMessageTextArea.append(s);}// 添加客户端的用户在线列表if (!serverOutput.startsWith("*")&& !serverOutput.startsWith("私聊")&& (serverOutput.indexOf("说") != -1)) {String listName = serverOutput.substring(0,serverOutput.indexOf('说'));// 如果JList中有相同名字的用户, 则不添加, 否则添加if (!users.contains(listName)) {System.out.println("用户" + listName + "上线了");users.add(listName);userList.setListData(users);}}// 判断服务器回发过来的消息是不是以"私聊"开头的, 是的话就提取出这两个用户名if (serverOutput.startsWith("私聊")) {String siliaoName1 = serverOutput.substring(serverOutput.indexOf("*") + 1, serverOutput.indexOf("和"));String siliaoName2 = serverOutput.substring(serverOutput.indexOf("和") + 1, serverOutput.indexOf("\r"));String siliaoBenshen = "";String siliaoDuixiangName = "";if (siliaoName1.equals(clientName)) {siliaoBenshen = siliaoName1;siliaoDuixiangName = siliaoName2;} else {siliaoBenshen = siliaoName2;siliaoDuixiangName = siliaoName1;}// 判断这两个名字中是否有与自己同名的, 有的话就弹出个私聊窗口if (siliaoName1.equals(clientName)|| siliaoName2.equals(clientName)) {new PointToPointTalkFrame(siliaoBenshen + "和"+ siliaoDuixiangName).setVisible(true);}}} catch (IOException e1) {System.out.println("读取服务器端消息出错");}}}}// 注册JList的点击事件, 进入私聊界面userList.addMouseListener(new MouseAdapter() {public void mouseClicked(MouseEvent e) {if (e.getClickCount() == 2) {if (erList.getSelectedValue().toString().equals(clientName)) {JOptionPane.showMessageDialog(null, "不能和自己聊天");} else {String PToPMemberName = "私聊"+ "*"+ clientName+ "和"+erList.getSelectedValue().toString();client.ps.println(PToPMemberName);}}}});界面:6.私聊页面代码:// 线程: 只要服务器端有消息, 就将消息显示到oldMessageTextAreaclass showOldMessageThread implements Runnable {public void run() {boolean flag = true;while (flag) {try {// 接收服务器端回发过来的消息String serverOutput = client.br.readLine() + "\r\n";System.out.println("私聊服务器发过来的消息: " + serverOutput);// 将消息中的两个用户名提取出来String s1 = "";if (serverOutput.startsWith("私聊")) {String[] s;if (serverOutput.startsWith("私聊*")) {s = serverOutput.substring(3,serverOutput.indexOf("\r")).split("和");} else {s = serverOutput.substring(2,serverOutput.indexOf("说")).split("和");}for (int i = 0; i < s.length; i++) {s1 = s1 + s[i];}}// 将标题中的两个用户名提取出来,有两种顺序String[] title = clientName.split("和");String s2 = "";for (int i = 0; i < title.length; i++) {s2 = s2 + title[i];}String s3 = "";for (int i = title.length - 1; i >= 0; i--) {s3 = s3 + title[i];}// 判断服务器端返回消息中的两个用户名等于客户端的两个用户名(忽略顺序), 则将消息显示出来(也就是显示在私聊窗口上)if (s1.equals(s2) || s1.equals(s3)) {String ss1 = serverOutput.substring(2, serverOutput.indexOf("和"));String ss2 = serverOutput.substring(serverOutput.indexOf(": "));// 将私聊客户端返回来的一行字符串按"�"进行拆分成多行, 显示在私聊的oldMessageArea中if (ss2.indexOf("�") != -1) {ss2 = ss2.replaceAll("�", "\r\n ");}oldMessageTextArea.append(ss1 + ss2);}} catch (IOException e1) {System.out.println("读取服务器端消息出错");}}}}界面:。

基于CS简单聊天程序课程设计报告

基于CS简单聊天程序课程设计报告

计算机网络课程设计任务书基于C/S模式的简单聊天程序设计说明书学院名称:计算机与信息工程学院班级名称:网络工程142学生XX:三学号:2014211540题目:基于C/S模式的简单聊天程序指导教师姓名:海宝起止日期:2016.6.13-2016.6.26目录一、选题背景1二、方案论证1三、过程论述23.1 服务器端23.2 客户机端10四、结果分析20五、结论21第一部分:正文部分一、选题背景使用Socket实现网上聊天功能。

用户可以通过客户端连接到服务器端并进行网上聊天。

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

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

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

客户端启动后在GUI界面接收用户输入的服务器端信息、账号和密码等验证客户的身份。

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

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

二、方案论证基于C/S的简单聊天室可以实现用户与服务器间,服务器与多个用户间的通信。

聊天室程序通常需要完成以下一些基本功能:(1)登录聊天室;(2)启动服务器;(3)关闭服务器;(4)用户之间的聊天;(5)退出聊天室。

本系统其体功能需求如下:(1)聊天室管理员经登录界面登录到管理界面,即系统的服务器端。

用户经登录界面进入聊天大厅。

(2)不论是管理员还是用户都需要在登录界面输入正确的用户名和密码后才可以登录到各自的界面中去。

(3)系统的两个主要界面都是为方便管理员和用户操作的。

首先,管理员进入到管理界面后可以方便的启动/停止服务器,看到在线用户的信息和聊天信息。

用户进入到聊天大厅中可以聊天,查看服务器状态。

(4)一个用户退出聊天室对其他用户不能产生影响,而服务器断开与客户端的连接则所有的用户都失去与服务器的连接。

JAVA课程设计报告聊天室

JAVA课程设计报告聊天室

JAVA课程设计报告聊天室一、课程目标知识目标:1. 学生能理解网络编程的基本概念,掌握JAVA Socket编程的基础知识。

2. 学生能运用面向对象编程思想,设计并实现聊天室客户端与服务器的数据传输功能。

3. 学生了解并掌握多线程技术在网络编程中的应用。

技能目标:1. 学生能运用所学知识,独立编写并调试简单的聊天室程序。

2. 学生具备分析问题、解决问题的能力,能针对聊天室程序进行优化和改进。

3. 学生能在团队协作中发挥自己的作用,与他人共同完成一个完整的网络编程项目。

情感态度价值观目标:1. 学生培养对计算机编程的兴趣,增强学习JAVA的自信心。

2. 学生认识到团队合作的重要性,培养良好的团队协作精神。

3. 学生通过编程实践,体验创新与创造的乐趣,培养积极向上的学习态度。

本课程针对高年级学生,结合课本内容,注重理论与实践相结合,以提高学生的实际编程能力为主要目标。

课程要求学生在掌握基本知识的基础上,能够独立完成实际项目,培养其分析问题、解决问题的能力。

同时,课程强调团队协作,使学生学会与他人共同进步,共同成长。

通过本课程的学习,使学生达到知识、技能和情感态度价值观的全面提升。

二、教学内容1. 网络编程基础理论:介绍网络编程的基本概念,包括IP地址、端口号、协议等,使学生理解网络通信的基本原理。

- 教材章节:第三章 网络编程基础2. JAVA Socket编程:讲解Socket编程的原理,指导学生掌握客户端与服务器之间的数据传输方法。

- 教材章节:第四章 Socket编程3. 面向对象编程:运用面向对象编程思想,设计聊天室程序,包括类的定义、封装、继承与多态。

- 教材章节:第二章 面向对象编程基础4. 多线程技术:介绍多线程编程的概念,分析在聊天室程序中如何实现多用户并发通信。

- 教材章节:第五章 多线程编程5. 聊天室程序设计与实现:指导学生完成聊天室客户端与服务器的编写,实现基本的功能需求。

多人聊天室项目

多人聊天室项目
参考程序:
随本文档提供的聊天室可执行文件
实现功能详解:
服务器能够接收多个客户端的连接请求,建立连接后应该将每个客户端的用户信息以及客户端Socket保存到服务器端以便后续进行信息转发使用。
当某一个客户端连接到服务器端之后应该将新用户的信息发送给其他用户,以便其他客户端更新在线好友列表
当某一个客户端与服务器端断开连接之后应该将该客户端的下线信息发送给其他客户端,这些客户端进行好友列表更新,同时服务器端应该将下线客户端的信息以及Socket从服务器端移除,该客户端清空好友列表,关闭Socket以及流
多人聊天室项目项目Fra bibliotek的:熟悉初级知识点的使用
熟悉Java常用类库的使用
掌握类的定义与使用
熟悉简单线程的应用
熟悉网络程序的数据传输流程
项目名称:
多人在线聊天室
实现功能:
服务器程序启动与停止
客户端程序与服务器端程序的连接与断开
客户端信息的发送和接收
实现原理:
该程序以TCP协议为基础进行开发,采用Java中提供的Socket作为客户端,ServerSocket作为服务器端,某一客户端发生信息给服务器,服务器将信息转发给其他客户端,最终实现多人聊天室。
当某一客户端发送聊天信息到服务器端时,服务器通过该客户端Socket读取到聊天信息后将该信息通过其他客户端的Socket转发给这些客户端
当服务器停止时,先通知其他客户端,服务器下线,同时将服务器的客户端Socket、流以及线程关闭或停止,然后关闭ServerSocket,移除在线用户信息,客户端收到服务器关闭信息之后关闭客户端Socket以及流,更新在线列表

SOCKET网络编程:Linux下实现聊天室

SOCKET网络编程:Linux下实现聊天室

SOCKET网络编程:Linux下实现聊天室程序介绍:本聊天室程序在Ubuntu下,采用C语言实现,结构为Client/Server结构;服务端程序通过共享存储区存储聊天数据,并发送给每个连接的客户端;服务端程序和客户端程序都是通过父子进程分别负责发送和接收数据的,以避免数据冲撞;需按以下格式调用客户端程序:client.exe 服务端主机IP 端口号(本程序设定为:3490) 用户名(在聊天室中显示的用户名)。

程序截图://--------------------------------服务端----------------------------------------------//--------------------------------客户端1:真水无香--------------------------------------//--------------------------------客户端2:蜡笔小新--------------------------------------程序代码如下://--------------------------------server.c-------------------------------------------------- //包含工程所需的头文件#include<stdio.h>#include<stdlib.h>#include<sys/types.h>//数据类型定义#include<sys/stat.h>#include<netinet/in.h>//定义数据结构sockaddr_in#include<sys/socket.h>//提供socket函数及数据结构#include<string.h>#include<unistd.h>#include<signal.h>#include<sys/ipc.h>#include<errno.h>#include<sys/shm.h>#include<time.h>#define PERM S_IRUSR|S_IWUSR#define MYPORT 3490 //宏定义定义通信端口#define BACKLOG 10 //宏定义,定义服务程序可以连接的最大客户数量#define WELCOME "|----------Welcome to the chat room! ----------|"//宏定义,当客户端连接服务端时,想客户发送此欢迎字符串//转换函数,将int类型转换成char *类型void itoa(int i,char*string){int power,j;j=i;for(power=1;j>=10;j/=10)power*=10;for(;power>0;power/=10){*string++='0'+i/power;i%=power;}*string='\0';}//得到当前系统时间void get_cur_time(char * time_str){time_t timep;struct tm *p_curtime;char *time_tmp;time_tmp=(char *)malloc(2);memset(time_tmp,0,2);memset(time_str,0,20);time(&timep);p_curtime = localtime(&timep);strcat(time_str," (");itoa(p_curtime->tm_hour,time_tmp);strcat(time_str,time_tmp);strcat(time_str,":");itoa(p_curtime->tm_min,time_tmp);strcat(time_str,time_tmp);strcat(time_str,":");itoa(p_curtime->tm_sec,time_tmp);strcat(time_str,time_tmp);strcat(time_str,")");free(time_tmp);}//创建共享存储区key_t shm_create(){key_t shmid;//shmid = shmget(IPC_PRIVATE,1024,PERM);if((shmid = shmget(IPC_PRIVATE,1024,PERM)) == -1){fprintf(stderr,"Create Share Memory Error:%s\n\a",strerror(errno)); exit(1);}return shmid;}//端口绑定函数,创建套接字,并绑定到指定端口int bindPort(unsigned short int port){int sockfd;struct sockaddr_in my_addr;sockfd = socket(AF_INET,SOCK_STREAM,0);//创建基于流套接字my_addr.sin_family = AF_INET;//IPv4协议族my_addr.sin_port = htons(port);//端口转换my_addr.sin_addr.s_addr = INADDR_ANY;bzero(&(my_addr.sin_zero),0);if(bind(sockfd,(struct sockaddr*)&my_addr,sizeof(struct sockaddr)) == -1){perror("bind");exit(1);}printf("bing success!\n");return sockfd;}int main(int argc, char *argv[]){int sockfd,clientfd,sin_size,recvbytes; //定义监听套接字、客户套接字pid_t pid,ppid; //定义父子线程标记变量char *buf, *r_addr, *w_addr, *temp, *time_str;//="\0"; //定义临时存储区struct sockaddr_in their_addr; //定义地址结构key_t shmid;shmid = shm_create(); //创建共享存储区temp = (char *)malloc(255);time_str=(char *)malloc(20);sockfd = bindPort(MYPORT);//绑定端口while(1){if(listen(sockfd,BACKLOG) == -1)//在指定端口上监听{perror("listen");exit(1);}printf("listening......\n");if((clientfd = accept(sockfd,(struct sockaddr*)&their_addr,&sin_size)) == -1)//接收客户端连接{perror("accept");exit(1);}printf("accept from:%d\n",inet_ntoa(their_addr.sin_addr));send(clientfd,WELCOME,strlen(WELCOME),0);//发送问候信息 buf = (char *)malloc(255);ppid = fork();//创建子进程if(ppid == 0){//printf("ppid=0\n");pid = fork(); //创建子进程while(1){if(pid > 0){//父进程用于接收信息memset(buf,0,255);//printf("recv\n");//sleep(1);if((recvbytes = recv(clientfd,buf,255,0)) <= 0) {perror("recv1");close(clientfd);raise(SIGKILL);exit(1);}//write buf's data to share memoryw_addr = shmat(shmid, 0, 0);memset(w_addr, '\0', 1024);strncpy(w_addr, buf, 1024);get_cur_time(time_str);strcat(buf,time_str);printf(" %s\n",buf);}else if(pid == 0){//子进程用于发送信息//scanf("%s",buf);sleep(1);r_addr = shmat(shmid, 0, 0);//printf("---%s\n",r_addr);//printf("cmp:%d\n",strcmp(temp,r_addr));if(strcmp(temp,r_addr) != 0){strcpy(temp,r_addr);get_cur_time(time_str);strcat(r_addr,time_str);//printf("discriptor:%d\n",clientfd);//if(send(clientfd,buf,strlen(buf),0) == -1)if(send(clientfd,r_addr,strlen(r_addr),0) == -1){perror("send");}memset(r_addr, '\0', 1024);strcpy(r_addr,temp);}}elseperror("fork");}}}printf("------------------------------\n");free(buf);close(sockfd);close(clientfd);return 0;}//-----------------------------client.c------------------------------------------------- //包含工程所需的头文件#include<stdio.h>#include<netinet/in.h>//定义数据结构sockaddr_in#include<sys/socket.h>//提供socket函数及数据结构#include<sys/types.h>//数据类型定义#include<string.h>#include<stdlib.h>#include<netdb.h>#include<unistd.h>#include<signal.h>#include<time.h>int main(int argc, char *argv[]){struct sockaddr_in clientaddr;//定义地址结构pid_t pid;int clientfd,sendbytes,recvbytes;//定义客户端套接字struct hostent *host;char *buf,*buf_r;if(argc < 4){printf("usage:\n");printf("%s host port name\n",argv[0]);exit(1);}host = gethostbyname(argv[1]);if((clientfd = socket(AF_INET,SOCK_STREAM,0)) == -1) //创建客户端套接字{perror("socket\n");exit(1);}//绑定客户端套接字clientaddr.sin_family = AF_INET;clientaddr.sin_port = htons((uint16_t)atoi(argv[2]));clientaddr.sin_addr = *((struct in_addr *)host->h_addr);bzero(&(clientaddr.sin_zero),0);if(connect(clientfd,(struct sockaddr *)&clientaddr,sizeof(struct sockaddr)) == -1) //连接服务端{perror("connect\n");exit(1);}buf=(char *)malloc(120);memset(buf,0,120);buf_r=(char *)malloc(100);if( recv(clientfd,buf,100,0) == -1){perror("recv:");exit(1);}printf("\n%s\n",buf);pid = fork();//创建子进程while(1){if(pid > 0){//父进程用于发送信息//get_cur_time(time_str);strcpy(buf,argv[3]);strcat(buf,":");memset(buf_r,0,100);//gets(buf_r);fgets(buf_r,100,stdin);strncat(buf,buf_r,strlen(buf_r)-1);//strcat(buf,time_str);//printf("---%s\n",buf);if((sendbytes = send(clientfd,buf,strlen(buf),0)) == -1) {perror("send\n");exit(1);}}else if(pid == 0){//子进程用于接收信息memset(buf,0,100);if(recv(clientfd,buf,100,0) <= 0){perror("recv:");close(clientfd);raise(SIGSTOP);exit(1);}printf("%s\n",buf);}elseperror("fork");}close(clientfd);return 0;}。

简单的php+mysql聊天室实现方法(附源码)

简单的php+mysql聊天室实现方法(附源码)

简单的php+mysql聊天室实现⽅法(附源码)本⽂实例讲述了简单的php+mysql聊天室实现⽅法。

分享给⼤家供⼤家参考,具体如下:这⾥介绍的程序分为 8 个⽂件:frameset框架页⾯:index.php显⽰聊天室内容页:show.php⽤户登陆页⾯:login.php⽤户发⾔页⾯:speak.php数据库配置⽂件:config.php页⾯美化样式:style.css数据库⽂件:chat.sql发⾔表情包:face/分别介绍如下:⼀、数据库⽂件chat.sql如下:SET FOREIGN_KEY_CHECKS=0;-- ------------------------------ Table structure for `chat`-- ----------------------------DROP TABLE IF EXISTS `chat`;CREATE TABLE `chat` (`chtime` datetime default NULL,`nick` char(10) NOT NULL,`words` char(150) default NULL,`face` int(11) default NULL) ENGINE=InnoDB DEFAULT CHARSET=gb2312;-- ------------------------------ Records of chat-- ----------------------------INSERT INTO chat VALUES ('2013-03-21 04:15:14', 'smiling', '测试显⽰发⾔', '3');INSERT INTO chat VALUES ('2013-03-21 04:46:26', 'smiling', '时间有问题,', '5');INSERT INTO chat VALUES ('2013-03-21 04:47:28', 'php新⼿', '新⼿来了。

WCF聊天室程序代码详细讲解教程

WCF聊天室程序代码详细讲解教程

WCF聊天室程序代码详细讲解教程一、概述二、详细实现步骤1. 创建WCF服务应用程序(1)打开Microsoft Visual Studio,创建新的WCF服务应用程序,项目名称为ChatroomServer;(2)右键点击项目添加一个WCF服务,命名为ChattingService,在其中编写如下代码:using System;using System.Collections.Generic;using System.Linq;using System.ServiceModel;using System.Text;namespace ChatroomServer[ServiceContract(CallbackContract=typeof(IChattingCallback))] public interface IChattingService//用于客户端注册[OperationContract]bool Register(string username);//用于客户端发送信息[OperationContract]void Say(string username, string message);//用于客户端注销[OperationContract]void Logout(string username);}//定义一个回调用于客户端接收信息public interface IChattingCallback[OperationContract(IsOneWay = true)]void ReceiveMessage(string username, string message);}2.实现IChattingService接口在ChattingService.cs文件中实现IChattingService接口,添加事件实现信息广播,如下所示:using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.ServiceModel;using System.Threading;namespace ChatroomServerpublic class ChattingService : IChattingService//注册事件,用于接收客户端注册信息public delegate void RegisterEventHandler(string username);public static RegisterEventHandler ClientRegisterEvent;//注销事件,用于接收客户端注销信息public delegate void LogoutEventHandler(string username);public static LogoutEventHandler ClientLogoutEvent;//say事件,用于接收客户端发送消息public delegate void SayEventHandler(string username, string message);。

JAVA写一网络聊天程序

JAVA写一网络聊天程序
listenClient(port);
}
if(e.getSource()==jButton2){
String s=this.jTextField3.getText().trim();
sendData(s);
}
}
private void listenClient(int port){//侦听
MyThread t=new MyThread();
t.start();
}
}catch(Exception ex){
}
}
private void sendData(String s){//发送数据
jButton2.setBorder(BorderFactory.createEtchedBorder());
jButton2.setFont(new java.awt.Font("Dialog", 0, 14));ctangle(440, 58, 73, 25));
JAVA写一网络聊天程序:
要求:聊天室服务器、聊天室客户端;客户端之间可以聊天。
因为我是初级选手,想借此程序分析学习java,所以代码最好多一点注释...
分数有限,望大家不吝赐教!!问题补充:
需要图形用户界面哦,最好用swing组件
服务器端:采用多线程,可以向客户广播:当前聊天室人数,客户名称列表,客户进入离开提示;
jTextField3.setBounds(new Rectangle(114, 60, 314, 24));
jTextField3.setText("");
jButton2.setText("发送");

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内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!。

pythonGui聊天室课程设计

pythonGui聊天室课程设计

pythonGui聊天室课程设计一、课程目标知识目标:1. 学生能理解Python GUI编程的基本概念,掌握使用tkinter库进行图形用户界面设计的方法。

2. 学生能学会使用Python编写基本的聊天室程序,理解客户端与服务器之间的通信原理。

3. 学生能够运用所学知识,结合Python编程技巧,实现一个具备基本功能的聊天室应用程序。

技能目标:1. 学生能够运用tkinter库创建窗口、按钮、文本框等基本图形界面元素,并对其进行事件处理。

2. 学生能够使用Python的网络编程知识,实现聊天室内的信息发送和接收功能。

3. 学生能够通过课程实践,培养问题解决能力、团队协作能力和创新思维能力。

情感态度价值观目标:1. 学生在学习过程中,培养对编程的兴趣和热情,提高对计算机科学的认识和好奇心。

2. 学生通过合作完成课程项目,学会尊重他人意见,培养良好的沟通能力和团队协作精神。

3. 学生能够认识到编程在现实生活中的应用价值,激发他们将所学知识应用于解决实际问题的意识。

课程性质:本课程为实践性较强的课程,注重培养学生的动手能力和实际问题解决能力。

学生特点:学生具备一定的Python编程基础,对网络编程和图形用户界面设计有一定了解,但实践经验不足。

教学要求:教师需引导学生通过自主学习、合作探究和动手实践,将所学知识应用于实际项目中,提高学生的编程能力和团队协作能力。

同时,关注学生的个体差异,提供有针对性的指导和帮助。

通过课程目标的分解和教学设计,确保学生能够达到预期的学习成果。

二、教学内容1. tkinter库基本组件的使用:窗口、标签、按钮、文本框、输入框等。

- 课本章节:第三章 图形用户界面设计2. Python网络编程基础:套接字编程、TCP/UDP协议。

- 课本章节:第五章 网络编程3. 聊天室程序设计原理:客户端与服务器通信、多线程。

- 课本章节:第五章 网络编程、第六章 多线程与网络应用4. 聊天室功能实现:用户登录、消息发送、接收与显示、用户列表管理。

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。

UDP网络聊天实验

UDP网络聊天实验

计算机网络原理实验报告UDP网络聊天程序设计班级:计算机1301班学号:1307010116姓名:席凤凯实验五 UDP网络聊天程序设计一.实验目的:编程设计基于 UDP 的简单聊天室程序,实现服务器与客户端之间的对话通信功能。

二.实验原理:网络编程一般都是基于 TCP 或 UDP 的,一般过程如下:(1)TCP 编程的服务器端与客户端一般步骤:服务器端:1、创建一个 socket,用函数 socket();2、绑定 IP 地址、端口等信息到 socket 上,用函数 bind();3、开启监听,用函数 listen();4、接收客户端上来的连接,用函数 accept();5、收发数据,用函数 send()和 recv(),或者 read()和 write();6、关闭网络连接;7、关闭监听;客户端:1、创建一个 socket,用函数 socket();2、设置要连接的对方的 IP 地址和端口等属性;3、连接服务器,用函数 connect();4、收发数据,用函数 send()和 recv(),或者 read()和 write();5、关闭网络连接;(2) UDP 编程步骤如下:服务器端:1、创建一个 socket,用函数 socket();2、绑定 IP 地址、端口等信息到 socket 上,用函数 bind();3、循环接收数据,用函数 recvfrom();4、关闭网络连接;客户端:1、创建一个 socket,用函数 socket();2、设置对方的 IP 地址和端口等属性;3、发送数据,用函数 sendto();4、关闭网络连接;三.实验内容:编辑代码:(1)服务器源程序:#include <stdio.h> 标准输入输出头文件#include <netinet/in.h> 互联网地址族#include <arpa/inet.h> LINUX 下 C 语言程序的 INTERNET 定义头文件#include <unistd.h> 符号常量#include <fcntl.h> 文件控制#include <sys/stat.h> 文件状态#include <sys/types.h> 基本系统数据类型#include <sys/socket.h> 套接字接口#define LOCALPORT 4567//定义本地服务器端口int main(int argc,char *argv[]){int s,len;struct sockaddr_in addr;int addr_len;char msg[256];int i=0;// 编写一个函数用来初始化套接字和绑定套接字。

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

目录1 引言 (1)1.1项目背景 (1)1.2国内外研究现状 (2)1.3主要思路 (2)2 需求分析 (4)2.1设计目标 (4)2.2开发环境 (4)2.3功能要求 (4)2.4实现效果 (5)2.5网络聊天室系统E-R图 (6)3 系统概要设计 (7)3.1需求规定 (7)3.2系统层次结构 (7)3.3系统数据结构设计 (8)3.4系统流程图 (9)4 详细设计及编码方式 (11)4.1登录功能模块设计 (11)4.2注册功能模块设计 (13)4.3房间选择功能模块设计 (14)4.4聊天室主界面设计 (16)4.4.1聊天室整体框架设计 (16)4.4.2导航区设计 (18)4.4.3显示在线区用户设计 (19)4.4.4显示聊天信息区设计 (20)4.4.5发送信息区设计 (21)4.5修改密码功能模块设计 (23)4.6选择头像功能模块设计 (25)4.7用户管理功能模块设计 (26)5 系统测试 (29)5.1系统测试目标 (29)5.2系统测试内容 (29)5.3系统测试结论 (30)6 结论 (31)参考文献 (32)致谢 (33)1引言1.1项目背景21世纪的一些重要特征就是数字化、网络化和信息化,它是一个以网络为核心的信息时代。

要实现这些就要依靠完善的网络,因此网络现在已经成为信息社会的命脉和发展知识经济的重要基础。

网络对社会生活的方方面面已经产生了不可估量的影响[1]。

截止2010年6月底,我国网民规模达4.2亿,互联网普及率持续上升增至31.8%,这其中手机网民增长明显,半年内新增4334万,达到2.77亿人[2]。

我国网民的互联网应用表现出商务化程度迅速提高、娱乐化倾向继续保持、沟通和信息工具价值加深的特点。

社交网站、即时通信使用率增长较快,半年用户增长19.6%和11.7%[3]。

由于交通的发达,现代人会经常地流动,因此面对面的亲身交流往往不可企及。

而网络恰好就为这些希望能够经常交流的人们提供了加强联系、增进交流的平台。

社交网络源自网络社交,网络社交的起点是电子邮件。

早期的电子邮件解决了远程邮件传输的问题,至今它也是互联网上最普及的应用,而后BBS把网络社交推进了一步。

即时通信的出现更像是前面两个社交工具的升级版本,提高了即时效果和同时交流能力[4]。

社科院2005年调查关注了人们使用这些网络交流工具的情况,调查表明,人们最常用的网络交流工具为电子邮件,其次是ICQ和聊天[5]。

聊天室作为因特网应用工具之一,在社会上起着越来越重要的作用。

70年代末,有一种冒险游戏,在这个游戏中,就有一些对话,它帮助了互联网中聊天室的诞生。

也就是IRC。

IRC是芬兰人Jarkko Oikarnen于1988年首创的一种在网络中进行聊天的协议。

直到今天,大部分聊天室都会以IRC为基础。

网络聊天室刚开始的时候是以文本聊天为主,后来出现了语音聊天,到了今天,视频、语音、文字都很好的融入到了聊天工具当中。

网络聊天之所以不同于现实聊天,是因为网络聊天是在虚拟的环境中完成的,从某种意义上讲,网络聊天是现实聊天的延伸。

虚拟的网络聊天客服了现实聊天中的空间限制,是的聊天的空间大大的扩展了。

网络聊天因其技术的发展实现了空间的无限扩展,形成了只要有互联网,不同地方的人们就可以聊天的状况,使得现实生活的交往范围大大扩展了。

随着互联网技术的不断发展,衍生出各种形式的非文字类的交互式媒体元素,如FLASH、流媒体、互动白板等。

这些元素在2004年后逐步被整合到了具有实时互动性概念的网络聊天室应用。

而此时,聊天室的概念也逐步转向所谓“富媒体交互服务房间” [6]。

随着互联网人数的不断增多,聊天室还会有更大的发展。

1.2国内外研究现状在国内许多网站开设了聊天室,比如“新浪网”聊天室、“263在线”、“网易”聊天室等。

而人气最旺的,莫过于有“全球最大中文聊天社区”之称的“新浪网”聊天室。

该网站为不同年龄、不同职业、不同地区、不同爱好的网友量身定制了数百个不同主题的房间[7]。

在国外,也出现了很多的聊天室,比如Omegle、Facebook、MSN、MySpace等。

在这些聊天室中,Omegle聊天室比较特别,这是一个针对陌生人交流的Web产品,这个网站与众不同之处就在于能够随机的向每位用户推送一个陌生人与之进行交流。

在这里,你不会知道对方的任何信息,所有的信息被红色的“Stranger”一词代替,因此会给人一种全新的感觉[8]。

网络聊天室带来了很多便利,但也出现了一些问题。

以在线聊天这种方式出现的网络人际沟通,数量及其巨大,参与对话的人数众多,但与现实不同的是,良好沟通并不多见,通常一个人以他人的顺利交流是以数倍于此甚至更多的沟通失败为代价的[9]。

同时,由于网上聊天室中,没有规范,没有固定感;人们来去自由,甚至仅仅只有相互的问候,它只是一种表达情感的介质,而且人们往往在表达是不考虑后果[10]。

所以在网络聊天中出现了很多不良的信息,对于青少年的健康成长是很不利的[11]。

但是随着技术的不断提高,这些必定会被改进。

1.3主要思路一般的在线聊天室体系结构都包括数据库设计、数据访问层、业务逻辑层和页面显示层。

数据库设计是最基础的工作,数据库的设计模型是整个系统设计的基础,一旦确定了数据库的结构,在开发过程中不要轻易地修改,否则会对后面的工作造成巨大的影响[12]。

数据访问层完成所有与数据库的交互操作。

业务逻辑层实现在线聊天室系统的所有业务逻辑,包括用户管理和发表信息的管理等。

页面显示层用于实现最终显示在浏览器上的用户可以看到的界面,其主要功能包括业务逻辑层的调用、动态显示数据以及显示方式等[13,14]。

一般在设计程序前,需要对系统功能进行分析,并确定数据库中数据表机存储过程的定义。

而一般的聊天室具有以下的功能:(1)采用数据库记录在线用户信息及聊天信息;(2)登录及注册功能;(3)群聊与私聊功能;(4)聊天用户实时更新等。

俗话说“三分技术,七分管理,十二分基础数据”,可见数据库的设计也是十分重要的。

数据库设计步骤为:(1)需求分析;(2)概念结构设计;(3)逻辑结构设计;(4)物理结构设计;(5)数据库实施;(6)数据库运行和维护[15]。

本系统采用语言编写,并结合数据库,完成一个具有登录、注册、选择聊天室、群聊、私聊等功能的在线聊天室。

2需求分析该部分主要叙述了该网络聊天室系统的设计目标、拥有的功能以及实现后的应具有的效果。

2.1设计目标该系统为一个在线聊天室的网站,除了具备所有聊天室的基本功能外,在设计以及实施的过程中要尽可能做到使该聊天室系统具有易操作性、良好的扩展性、易用性等特性,确保在未来的安装、管理、运行维护中,使普通用户和专业管理人员得到最大的方便。

2.2开发环境开发环境为:(1)SQL Server 2008数据库工具;(2)Windows Visual Studio 2010 编程软件。

2.3功能要求该网络聊天室系统使用人员分为两类,一类为普通用户,另一类为管理员用户,他们具有不同的功能。

普通用户是该系统的实际使用者,他们具有聊天室中的基本功能,包括:注册与登录、选择房间、群聊与私聊、更换头像和修改密码等功能。

管理员是该系统的管理人员,他们除具有普通用户的基本功能外,还具有管理普通用户的功能,具体为:设置黑名单。

根据系统功能的不同,系统的功能结构图分三部分,第一部分为总的功能结构图,第二部分是普通用户的功能结构图,第三部分是管理员的功能结构图。

总的功能结构图如图2.1。

图2.1系统总功能结构图普通用户功能结构图如图2.2。

图2.2普通用户功能结构图管理员功能结构图如图2.3。

图2.3 管理员功能结构图2.4实现效果该聊天室拥有两种不同的用户身份:普通用户和管理员。

在登录时需要判断用户身份,当用户名、密码和身份输入正确进入后,用户将选择所要进入的聊天室,该系统默认设置了四个聊天室供用户选择。

选择聊天室进入后,是聊天界面,聊天界面由三部分组成,分为显示在线用户、聊天信息显示和发送信息。

显示在线用户是统计在线人数并列表显示,用户名列表中将显示用户头像和用户的用户名。

聊天信息显示分为群聊信息显示和私聊信息显示。

在聊天界面的菜单中有修改密码、退出和修改头像的功能。

修改头像可以选择自己喜爱的头像,系统有十五个头像供用户选择。

管理员除了具有这些普通用户的基本功能外,还具有管理用户的功能,可以将某个用户加入黑名单,黑名单中的用户是不可以发言的,其他的功能没有影响。

总的来说,本网络聊天室系统实现了以下的功能:(1) 注册功能,首先检测用户名是否使用,若未使用,则该用户可以使用;(2) 登录功能,输入用户名和密码,并且选择用户登录的角色;(3) 聊天室房间的选择,系统预置四个房间;(4) 在线用户显示,定时更新在线用户列表;(5) 聊天信息的显示,分为群聊和私聊,定时更新聊天信息;(6) 发送信息,选择对象后,确定是私聊还是公聊;(7) 更改密码功能;(8) 选择头像功能,系统预设十五个头像;(9) 更换聊天室功能;(10) 管理黑名单功能,该功能为管理员的功能。

2.5网络聊天室系统E-R图根据功能分析,得到该网络聊天室系统E-R如图2.4所示:图2.4网络聊天室系统E-R图3系统概要设计该部分内容主要讲述了系统的模块划分、模块的层次结构及调用关系、模块接口和人机界面等内容。

同时包括了系统数据库的设计。

3.1需求规定(1)对功能的规定:①主界面:该系统包括了注册与登录界面、选择房间界面、聊天室界面和管理用户界面。

在这些不同的界面中,不同用户拥有不同的权限,根据权限的不同,用户所拥有的功能也是不同的。

②系统后台:包括系统数据库的建立、重要信息的管理,通过前台界面实现对数据库的查找、修改等功能。

(2) 对功能模块的描述:①登录与注册功能模块:实现不同用户的注册与登录功能。

②选择房间功能模块:进入聊天室系统的用户,需要选择所要进入的房间,系统预设四个房间。

③聊天室主界面:该部分包括了显示在线用户、聊天信息的显示和发送信息三个功能模块。

显示在线用户主要是统计在线用户人数并将其列表显示;聊天信息显示分为公聊信息显示和私聊信息显示,不同模式信息将显示在不同区域;发送信息则是按公聊或者私聊模式将信息发送出去。

④修改密码功能模块:重新修改用户的密码。

⑤选择头像功能模块:重新选择用户头像,系统预设十五个头像,头像将显示在在线用户区域。

⑥管理用户功能模块:该功能模块是只有管理员才拥有的功能,主要是黑名单的管理。

3.2系统层次结构该系统的层次结构以及调用关系如图3.1。

在该图中可以看到,经过注册与登录功能模块后,系统模块分为了两大部分,一部分为普通用户模块,另一部分为管理员模块。

相关文档
最新文档