局域网聊天室客户端源码

局域网聊天室客户端源码
局域网聊天室客户端源码

package demo;

import java.io.IOException;

import java.io.InputStream;

import java.io.OutputStream;

import https://www.360docs.net/doc/2b15478919.html,.Socket;

import https://www.360docs.net/doc/2b15478919.html,.UnknownHostException;

import javax.swing.JFrame;

/**

* 客户端应用程序

* @author soft01

*

*/

public class CopyOfClient {

/*

* 在客户端运行的Socket

* 用于链接服务端的ServerSocket

*/

private Socket socket;

private JFrame chatFrame;

/**

* 构造方法

*/

public CopyOfClient(){

try {

socket=new Socket("192.168.3.128",63650);

} catch (UnknownHostException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

}

public void start() {

try {

OutputStream out=socket.getOutputStream();

InputStream in=socket.getInputStream();

chatFrame=new ChatFrame(out,in,socket);

chatFrame.setVisible(true);

} catch (IOException e) {

e.printStackTrace();

}finally{

}

}

CopyOfClient client=new CopyOfClient();

client.start();

}

}

package demo;

import java.awt.event.KeyEvent;

import java.io.BufferedReader;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.io.OutputStream;

import java.io.OutputStreamWriter;

import java.io.PrintWriter;

import java.io.UnsupportedEncodingException;

import https://www.360docs.net/doc/2b15478919.html,.ServerSocket;

import https://www.360docs.net/doc/2b15478919.html,.Socket;

import javax.swing.JFileChooser;

import javax.swing.JOptionPane;

import javax.swing.JScrollBar;

import javax.swing.ScrollPaneConstants;

/**

*

* @author __USER__

*/

public class ChatFrame extends javax.swing.JFrame {

/**

*

*/

private static final long serialVersionUID = 1L;

/** Creates new form ChatFrame */

public ChatFrame(OutputStream os, InputStream is,final Socket socket) { initComponents();

try {

pw = new PrintWriter(new OutputStreamWriter(os, "utf-8"), true);

br = new BufferedReader(new InputStreamReader(is, "utf-8"));

this.socket=socket;

this.setTitle(nickName + "的聊天室");

pw.println(nickName);

new Thread() {

public void run() {

String message = null;

try {

while ((message = br.readLine()) != null) {

if(message.startsWith("@#FTDalert@")){

message=message.substring(11);

JOptionPane.showMessageDialog(null, "有人@你", "", JOptionPane.PLAIN_MESSAGE);

}

if(message.startsWith("#@FTD")){

if (message.startsWith("#@FTDthoseOnline")) {

try {

message = message.substring(16);

jTextArea4.setText(jTextArea4.getText()

+ message + "\n");

} catch (Exception e) {

}

} else if (message.startsWith("#@FTDnotice")) {

try {

message = message.substring(11);

jTextArea5.setText(jTextArea5.getText()

+ message + "\n");

} catch (Exception e) {

}

} else if (message.startsWith("#@FTDclearnotice")) {

jTextArea5.setText("");

} else if(message.startsWith("#@FTDclearmates")){

jTextArea4.setText("");

}

}else if(message.startsWith("@#FTDfiletransask")){

int i=message.indexOf(':');

int j=message.indexOf(':', i+1);

String ip=message.substring(i+1,j);

String fileName=message.substring(j+1);

ChatFrame.this.toFront();

recv(ip,fileName);

}else if(message.startsWith("@#FTDfiletransanswer")){

int i=message.indexOf(':');

String portstr=message.substring(i+1);

port=Integer.parseInt(portstr);

synchronized(ChatFrame.this){

ChatFrame.this.notify();

}

}/*else {

int ii=message.indexOf("@#FTDalert@",1);

JOptionPane.showMessageDialog(null, "有人@你", "", JOptionPane.PLAIN_MESSAGE);

String str = ChatFrame.this.jTextArea1

.getText();

ChatFrame.this.toFront();

ChatFrame.this.jTextArea1.setText(str + message + "\n");

bar.setValue(bar.getMaximum());

}*/

else{

String str = ChatFrame.this.jTextArea1

.getText();

ChatFrame.this.toFront();

ChatFrame.this.jTextArea1.setText(str + message

+ "\n");

bar.setValue(bar.getMaximum());

}

}

} catch (IOException e) {

e.printStackTrace();

} finally {

if (socket!= null) {

try {

JOptionPane.showMessageDialog(null, "服务器已经断开连接", "alert", JOptionPane.WARNING_MESSAGE);

socket.close();

dispose();

} catch (IOException e) {

e.printStackTrace();

}

}

}

}

}.start();

} catch (UnsupportedEncodingException e) {

e.printStackTrace();

}

}

/** This method is called from within the constructor to

* initialize the form.

* WARNING: Do NOT modify this code. The content of this method is

* always regenerated by the Form Editor.

*/

//GEN-BEGIN:initComponents

//

private void initComponents() {

jTextArea3 = new javax.swing.JTextArea();

jScrollPane1 = new javax.swing.JScrollPane();

jTextArea1 = new javax.swing.JTextArea();

jScrollPane2 = new javax.swing.JScrollPane();

jTextArea2 = new javax.swing.JTextArea();

jButton1 = new javax.swing.JButton();

jButton2 = new javax.swing.JButton();

jLabel4 = new javax.swing.JLabel();

jScrollPane4 = new javax.swing.JScrollPane();

jTextArea4 = new javax.swing.JTextArea();

jLabel1 = new javax.swing.JLabel();

jTextArea5 = new javax.swing.JTextArea();

jTextArea5.setLineWrap(true);

jTextArea3.setColumns(20);

jTextArea3.setRows(5);

jScrollPane3.setViewportView(jTextArea3);

setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); jTextArea1.setColumns(20);

jTextArea1.setEditable(false);

jTextArea1.setFont(new java.awt.Font("Dialog", 0, 14));

jTextArea1.setLineWrap(true);

jTextArea1.setRows(5);

jScrollPane1.setViewportView(jTextArea1);

bar=jScrollPane1.getVerticalScrollBar();

jTextArea2.setColumns(20);

jTextArea2.setRows(5);

jTextArea2.addKeyListener(new java.awt.event.KeyAdapter() {

public void keyTyped(java.awt.event.KeyEvent evt) {

jTextArea2KeyTyped(evt);

}

});

jScrollPane2.setViewportView(jTextArea2);

jButton1.setText("Send");

jButton1.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) {

jButton1ActionPerformed(evt);

}

});

jButton2.setText("Send File");

jButton2.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) {

jButton2ActionPerformed(evt);

}

jLabel4.setText(" ");

jTextArea4.setColumns(20);

jTextArea4.setEditable(false);

jTextArea4.setRows(5);

jScrollPane4.setViewportView(jTextArea4);

jLabel1.setFont(new java.awt.Font("Sans", 1, 14));

jLabel1.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);

jLabel1.setText(" Notice-Board");

jTextArea5.setColumns(20);

jTextArea5.setEditable(false);

jTextArea5.setRows(5);

jScrollPane5 = new javax.swing.JScrollPane(jTextArea5,ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED,

ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);

//jScrollPane5.setViewportView(jTextArea5);

javax.swing.GroupLayout layout = new javax.swing.GroupLayout(

getContentPane());

getContentPane().setLayout(layout);

layout

.setHorizontalGroup(layout

.createParallelGroup(

javax.swing.GroupLayout.Alignment.LEADING)

.addGroup(

layout

.createSequentialGroup()

.addGroup(

layout

.createParallelGroup( javax.swing.GroupLayout.Alignment.LEADING)

.addGroup(

layout .createSequentialGroup()

.addContainerGap()

.addGroup(

layout .createParallelGroup(

javax.swing.GroupLayout.Alignment.LEADING,

false)

.addComponent(

.addComponent(

jScrollPane1,

javax.swing.GroupLayout.DEFAULT_SIZE,

400,

Short.MAX_V ALUE)))

.addGroup(

layout

.createSequentialGroup()

.addGap(

23,

23,

23)

.addComponent( jButton1)

.addGap(

67,

67,

67)

.addComponent( jButton2)))

.addPreferredGap(

https://www.360docs.net/doc/2b15478919.html,ponentPlacement.RELATED)

.addGroup(

layout

.createParallelGroup(

javax.swing.GroupLayout.Alignment.LEADING)

.addGroup(

layout

.createSequentialGroup()

.addGroup(

layout .createParallelGroup(

javax.swing.GroupLayout.Alignment.TRAILING,

false)

.addComponent(

javax.swing.GroupLayout.Alignment.LEADING,

0,

0,

Short.MAX_V ALUE)

.addComponent(

jScrollPane5,

javax.swing.GroupLayout.Alignment.LEADING,

javax.swing.GroupLayout.DEFAULT_SIZE,

138,

Short.MAX_V ALUE))

.addPreferredGap( https://www.360docs.net/doc/2b15478919.html,ponentPlacement.RELATED,

javax.swing.GroupLayout.DEFAULT_SIZE,

Short.MAX_V ALUE)

.addComponent( jLabel4))

.addComponent(

jLabel1,

javax.swing.GroupLayout.PREFERRED_SIZE,

128,

javax.swing.GroupLayout.PREFERRED_SIZE))

.addContainerGap()));

layout

.setVerticalGroup(layout

.createParallelGroup(

javax.swing.GroupLayout.Alignment.LEADING)

.addGroup(

javax.swing.GroupLayout.Alignment.TRAILING,

layout

.createSequentialGroup()

.addGroup(

layout

.createParallelGroup(

javax.swing.GroupLayout.Alignment.LEADING,

layout

.createSequentialGroup()

.addContainerGap()

.addComponent(

jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE,

30, javax.swing.GroupLayout.PREFERRED_SIZE)

.addGap(

20,

20,

20)

.addComponent( jScrollPane5,

javax.swing.GroupLayout.DEFAULT_SIZE,

132, Short.MAX_V ALUE)

.addPreferredGap( https://www.360docs.net/doc/2b15478919.html,ponentPlacement.UNRELATED)

.addComponent( jScrollPane4,

javax.swing.GroupLayout.PREFERRED_SIZE,

323, javax.swing.GroupLayout.PREFERRED_SIZE))

.addGroup(

layout

.createSequentialGroup()

.addGroup(

layout .createParallelGroup(

javax.swing.GroupLayout.Alignment.LEADING)

.addGroup(

.createSequentialGroup()

.addGap(

89,

89,

89)

.addComponent(

jLabel4))

.addGroup(

layout

.createSequentialGroup()

.addGap(

23,

23,

23)

.addComponent(

jScrollPane1,

javax.swing.GroupLayout.DEFAULT_SIZE,

382,

Short.MAX_V ALUE)))

.addPreferredGap( https://www.360docs.net/doc/2b15478919.html,ponentPlacement.RELATED)

.addGroup(

layout .createParallelGroup(

javax.swing.GroupLayout.Alignment.BASELINE)

.addComponent(

jButton1)

jButton2))

.addPreferredGap( https://www.360docs.net/doc/2b15478919.html,ponentPlacement.RELATED)

.addComponent( jScrollPane2,

javax.swing.GroupLayout.PREFERRED_SIZE,

86, javax.swing.GroupLayout.PREFERRED_SIZE)))

.addContainerGap()));

pack();

}//

//GEN-END:initComponents

private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {

JFileChooser fc=new JFileChooser();

if(JFileChooser.APPROVE_OPTION==fc.showOpenDialog(this)){

File file=fc.getSelectedFile();

send(file);

}

}

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {

String str = this.jTextArea2.getText();

this.jTextArea2.setText("");

/*if(str.startsWith("@")){

String sub=str.substring(1, 9);

if(sub.matches("[1-9]+.[1-9]+.")){

str="@#FTDalert"+str;

}

}*/

//this.jTextArea1.setText(this.jTextArea1.getText() + str);

pw.println(str);

}

private void jTextArea2KeyTyped(java.awt.event.KeyEvent evt) {

if (evt.getKeyCode() == KeyEvent.VK_ENTER) {

String str = this.jTextArea2.getText();

this.jTextArea2.setText("");

this.jTextArea1.setText(this.jTextArea1.getText() + str);

pw.println(str);

}

}

/**

/*public static void main(String args[]) {

java.awt.EventQueue.invokeLater(new Runnable() {

public void run() {

new ChatFrame().setVisible(true);

}

});

}*/

//与服务器通信的输入输出流和socket

public PrintWriter pw;

public BufferedReader br;

public Socket socket;

//新建发送文件用

private ServerSocket fileSocket;

public int port;

JFileChooser save=new JFileChooser();

JScrollBar bar;

//GEN-BEGIN:variables

// Variables declaration - do not modify

private javax.swing.JButton jButton1;

private javax.swing.JButton jButton2;

private javax.swing.JLabel jLabel1;

private javax.swing.JLabel jLabel4;

private javax.swing.JScrollPane jScrollPane1;

private javax.swing.JScrollPane jScrollPane2;

private javax.swing.JScrollPane jScrollPane3;

private javax.swing.JScrollPane jScrollPane4;

private javax.swing.JScrollPane jScrollPane5;

private javax.swing.JTextArea jTextArea1;

private javax.swing.JTextArea jTextArea2;

private javax.swing.JTextArea jTextArea3;

private javax.swing.JTextArea jTextArea4;

private javax.swing.JTextArea jTextArea5;

// End of variables declaration//GEN-END:variables

private void recv(String ipDeliver,String fileName) {

final String ip=ipDeliver;

save.setSelectedFile(new File(fileName));

if(save.showSaveDialog(this)==JFileChooser.APPROVE_OPTION){ final File file=save.getSelectedFile();

new Thread(){

@Override

public void run() {

Socket recvSocket=null;

FileOutputStream fos=null;

try{

fileSocket=new ServerSocket(0);

int port = fileSocket.getLocalPort();

pw.println("@#FTDfiletransanswer"+ip+":"+port);

fos=new FileOutputStream(file);

byte[] buf=new byte[1024*2];

int len=0;

while((len=is.read(buf))>0){

fos.write(buf, 0, len);

fos.flush();

}

JOptionPane.showMessageDialog(null, "文件传输成功", "", JOptionPane.PLAIN_MESSAGE);

}catch(Exception e){

JOptionPane.showMessageDialog(null, "文件传输失败,请重试", "", JOptionPane.ERROR_MESSAGE);

}finally{

if(fos!=null)

try {

fos.close();

} catch (IOException e) {

e.printStackTrace();

}

if(recvSocket!=null){

try {

recvSocket.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

}

}.start();

}else{

pw.println("@#FTDfiletransanswer"+ip+":"+"-1");

}

}

private void send(File file){

final String name=file.getName();

final File srcFile=file;

new Thread(){

@Override

public void run() {

String ip;

Socket sendSocket=null;

OutputStream fileout=null;

FileInputStream fis=null;

if(true){

try {

ip=JOptionPane.showInputDialog(null, "输入对方IP", "", JOptionPane.PLAIN_MESSAGE);

synchronized(ChatFrame.this){

ChatFrame.this.wait();

}

Thread.sleep(1000);

if(port>0){

sendSocket=new Socket(ip,port);

fileout=sendSocket.getOutputStream();

fis=new FileInputStream(srcFile);

byte[] buf=new byte[1024*2];

int len=-1;

while((len=fis.read(buf))>0){

fileout.write(buf,0,len);

fileout.flush();

}

JOptionPane.showMessageDialog(null, "文件传送完毕", "", JOptionPane.PLAIN_MESSAGE);

}

} catch (Exception e) {

JOptionPane.showMessageDialog(null, "文件传送失败", "", JOptionPane.ERROR_MESSAGE);

}finally{

port=0;

if(sendSocket!=null){

try {

sendSocket.close();

} catch (IOException e) {

e.printStackTrace();

}

}

if(fis!=null){

try {

fis.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

}

}

}.start();

}

}

局域网聊天系统(详细设计)

局域网聊天系统 详 细 设 计 成绩:

目录 1.功能需求 (1) 2.数据库设计 (1) 2.1 基本表设计 (1) 2.1.1 表结构汇总 (1) 2.1.2 T_Users表结构设计 (2) 2.1.3 XXX表结构设计 (2) 2.2 视图设计 (2) 2.2.1 视图汇总 (2) 2.2.2 XXX视图设计 (2) 2.3 存储过程设计 (3) 2.3.1 存储过程汇总 (3) 2.3.2 XXX存储过程代码 (3) 3.服务器端设计及实现 (3) 3.1 启动服务器功能的设计与实现 (3) 3.1.1 界面设计 (3) 3.1.2 流程 (4) 3.1.3 关键代码 (4) 3.2 消息管理功能的设计与实现 (4) 3.2.1 界面设计 (3) 3.2.2 流程 (4) 3.2.3 关键代码 (4) 4.客户端的设计与实现 (5) 4.1 注册模块的设计与实现 (5) 4.1.1 界面设计 (5) 4.1.2 流程图 (6) 4.1.3 关键代码 (6) 4.2 登陆功能的设计与实现 (6) 4.2.1 界面设计 (5) 4.2.2 流程图 (5) 4.2.3 关键代码 (6) 4.3 聊天功能的设计与实现 (7) 4.3.1 界面设计 (8) 4.3.2 流程图 (8) 4.3.3 关键代码 (9) 5.人员及分工 (9)

局域网聊天系统 详细设计1.功能需求 图 1 项目功能结构图2.数据库设计 2.1 基本表设计 2.1.1 表结构汇总 表 1 基本表汇总

2.1.2 T_Users表结构设计 表 2 用户表(T_Users)结构设计 2.1.3 XXX表结构设计 表 3 XXX(xxx)结构设计 2.2 视图设计 2.2.1 视图汇总 2.2.2 XXX视图设计

JAVA局域网聊天系统源代码

这是我自己做的简单聊天系统客户端 package LiaoTianSys; import java.awt.*; import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.io.*; import https://www.360docs.net/doc/2b15478919.html,.Socket; import https://www.360docs.net/doc/2b15478919.html,.UnknownHostException; public class ConversationFrame extends JFrame { JScrollPane jsp; JTextField jtf; static JTextArea jta; //JTextArea jat1,jta2; JButton enter=new JButton("发送"); JButton jb=new JButton("聊天室好友"); JButton jb2=new JButton("进入聊天室"); JButton jb3=new JButton("刷新在线人员列表"); JPanel jp,jp1,jp3,jp4; DefaultListModel listmodel = new DefaultListModel(); //static String[] NAME=new String[10]; String n[]={"f"}; JList list=new JList(listmodel); JLabel time=new JLabel("当前系统时间:"); JLabel showtime=new JLabel("显示时间"); JLabel jl=new JLabel("输聊天信息"); JLabel nicheng=new JLabel("昵称"); JTextField NCshuru=new JTextField(10); static DataOutputStream dos; static DataInputStream dis; //final LoginFrame lf; Socket socket; public ConversationFrame() { Container con=getContentPane(); con.setLayout(new BorderLayout()); jp=new JPanel(); setSize(700,600); setLocation(100,100); jta=new JTextArea(); jta.setEditable(false);

C+++网络聊天室设计报告和源程序

目录 1.需求分析 (2) 2.相关知识............................................... - 3 -2.1W INSOCK介绍 (3) 2.2MFC类CA SYNCSOCKET和CS OCKET (3) 2.3利用CS OCKET进行有连接的通信 (4) 3.详细设计................................... 错误!未定义书签。 3.1客户端的实现 (4) 3.2服务端的实现 (8) 4.程序运行结果.......................................... - 13 -4.1服务器端 .. (13) 4.2客户端 (13) 5.参考文献 ................................................................................................................... 错误!未定义书签。

1.需求分析 当前是数字信息时代,网络时代,任何一种编辑工具都不能忽视在网络上的应用,并且随着Internet 的普及和宽带技术的成熟,越来越多的用户进入网络世界中享用浏览新闻、查询信息、发送邮件、在线观看电影等服务,享受网络带来的便利和办公的高效,与此同时一个新型的Web应用程序为网民之间提供了一个实时通信的功能和场所,这就是聊天室。 在网络早期就开始盛行,不论是BBS,IRC 都有类似网上聊天室的机制。聊天室为网友提供了实时性对话的渠道,是网络上极为流行的一项服务。 聊天室适用于网上会议或闲聊的一些场合。聊天室为网友提供了较好的交友环境,网友之间相互以文字交谈,在形式上有点类似笔友的性质,却大大节省了书信往返的时间,这也是网上交友之所以如此热门的原因。 聊天室的设计目标 本课题是建立聊天通信模型,设计一个聊天室软件,包括服务器端和客户端,主要功能为: 服务器端功能: 1、初始化socket, 创建服务器端。 2、维护一个链表,保存所有用户的IP地址、端口信息。 3、接受用户传送来的聊天信息,然后向链表中的所用用户转发。 4、接受用户传送来的连接判断命令,并向用户发出响应命令。 客户端功能: 客户端界面上的两个文本框,一个用于显示接受的聊天信息,一个用来接受用户输入的聊天信息。当按下“发送”按钮时将信息发送给服务器。 通过本课题的毕业设计,可以比较深入的了解和掌握WINSOCK控件基本属性、方法和事件,理解网络聊天通信的概念,输控制协议(TCP)进行数据交流,初步掌握网络聊天通信程序的设计方法。并能巩固和扩展大学期间的学习内容,进行项目的设计开发训练,更好的适应社会的需求。

基于.NET局域网聊天工具设计

基于.NET局域网聊天工具设计 学校: 系:计算机系 专业:小学教育计算机双语 姓名: 完成时间:2012年5月28日

设计(论文)题目: 基于.NET局域网聊天工具设计 设计(论文)要求: 本设计的主要工作是设计一个基于WINDOWS平台的局域网即时聊天工具,具体是采用C\S模式实现用户之间的通信,然后阐述本软件的功能、特点及使用方法,并详细阐述开发本软件所用的相关技术,具体分析本软件的各个模块的功能及实现方法,说明本软件的设计思想及方法。 局域网聊天工具,是在局域网内部使用的,用户之间用来交流的一个工具,一般都具有文本聊天和文件传输功能。局域网聊天软件因其使用简单,系统资源消耗少等优点,成为各企事业单位等的局域网内广泛应用的软件之一。

中文摘要: 随着计算机网络技术的发展,各种各样基于网络的应用也随之诞生,比如基于互联网的信息发布,通信,数据共享等等。局域网的发展也同样迅速。很多政府机构,企业,学校,都是先以一个统一的局域网联结在一起,再分别接入INTERNET。因此基于局域网的即时通信工具,就这样应运而生了。本文提出了一个局域网聊天工具的设计,并在WINDOWS平台上加以了实现。本设计将文本聊天和文件传输等功能综合在一个客户端程序之内,使用C#语言进行网络编程,并进行了人性化的界面设计,使用起来简单方便,并且功能十分合理,又易于扩展以及个性化定制。 关键词:局域网;C/S体系结构;文本聊天;文件传输 英文摘要: Abstract:Along with the high-speed development of the computer network technology, various of applications which are based on network were born, such as Internet-based information releasing,communications,data sharing and so on. The development of LAN is the same fast. Because of Some government institutions, enterprises and schools constitute a LAN first ,then join into INTERNET, the real-time LAN-based communication tools emerged. this paper proposed a LAN chat tool designing, and then implement it on WINDOWS platform. The design integrated text-chat and file-transfer and other functions in a client procedure. It used C # language for network programming with designed a user-friendly and easy to use interface , and it's functions are reasonable and easy to extend, as well as customization. Key words: LAN; C/S Architecture ;text-chat; file-transfer;

网络聊天室系统设计与实现

科研训练 网络聊天室系统设计与实现Design and implementation of network chat room system 学生姓名XXX 专业软件工程 学号1305XXXXX 指导教师李XX 祝XX 学院计算机科学技术学院 二〇一六年六月

目录

一、引言 随着网络的大幅度普及,以及网络技术快速发展,人们通过网络进行交流的方式发生着巨大的变化,人们不再拘泥于移动电话的通话模式,越来越多的人通过网络聊天工具进行交流,网络聊天室便是非常典型的聊天工具之一。聊天室系统的即时交流方式满足了网络中人们同时与多人进行聊天交流的需要,使得较多的人在同一个聊天页面进行交流变得方便,简单。 本设计所完成的网络聊天室具有常用聊天室的所有功能,包括使用账号登录聊天室、注册账号、显示在线用户列表、显示系统消息、两人之间进行私密聊天、消息提醒、发送表情、修改发送文字颜色;同时,为了管理聊天室中的用户使用语言的文明,赋予管理员踢出使用不文明语言的用户功能,显示全部聊天信息。该系统采用B/S(浏览器/服务器)结构进行开发,参考网络中正在使用的大型聊天室的架构、分析聊天室可实现功能,结合本次设计的相关要求,进行开发设计并写出需求分析说明书。 该系统具体开发环境:使用专业版作为服务器运行平台,服务器开发语言使用Java语言,前台使用Jsp技术、JavaScript、Jquery语言,系统框架使用 Struts2+Hibernate+Spring框架,后台数据库使用MySql数据库。 二、需求分析 该系统采用B/S模式设计,开发目的主要是提供一个基于网络的安全文明的供多人聊天社交平台。 系统运行环境需求 该系统是在windows 专业版操作系统下,搭建的运行平台,使用myEclipse作为开发工具,mySql作为数据库,Java语言作为系统后台开发语言。 JSP技术作为前台开发语言,其中使用JavaScript以及Jquery作为脚本语言。工程框架使用Struts+Spring+Hibernate框架。 (1)服务器配置: (2)客户端要求配置: 谷歌浏览器、狐火浏览器以及IE浏览器以上版本。 模块功能分析 (一)用户注册登录模块 新用户在使用该聊天室系统时,必须先进行注册新用户操作,后台将注册信息添加到数据库中,用于胡勇登录验证;在注册成功之后再进行登录; 当用户名与密码匹配成功,即可进入聊天室系统。 (二)在线用户显示模块 当用户登录进入系统后,该页面实现在线用户的统计,并将在线用户依次显示出来。如果当前用户属于管理员角色,则在普通用户角色的右边显示“踢下线”链接,如果当前用户属于普通用户角色,则正常显示在线用户名。 (三)用户交流聊天模块 该模块主要负责发送信息内容,选择聊天对象;除此之外,可以修改聊天内容的字体颜色以及发送的表情。发言的颜色和发言的表情通过下拉式组合框实现。发言内容书写完毕后。通过点击“发送”按钮,发送聊天内容。 (四)聊天信息显示模块 当用户选择聊天对象并发送聊天内容后,显示出当前发送的内容以及之前的历史聊天内容,聊天的内容只有对话的两人可见,其他人不可见。当用户退出系统后,再次登录进入聊天室时,两人的对话记录依然存在。

基于JAVA局域网聊天程序设计与实现(附源代码)

局域网聊天课程设计 摘要 随着互联网的发展,网络聊天工具作为一种交流工具,已经受到网民的青睐。目前,出现了很多功能强大的聊天工具,其中应用比较广泛的有腾讯QQ、MSN-Messager等等。 即时通讯软件,是每一个上网用户都需要的工具,它除了能够让您迅速地在网上找到自己的朋友和伙伴之外,还可以实时交谈和传递信息,截止到目前,全球约有近3亿多人使用即时软件,正因为即时通讯软件拥有数以亿计的用户和增长的市场,所以各个公司都盯上了这个最大的市场,一时间,即时通讯市场硝烟四起。 对等网络(peer-to-peer,简称P2P),应用最初出现时和现在并不相同。事实上可以认为它是若干不同技术以及流行趋势相结合的产物。以下是导致P2P技术发展最重要的趋势:首先,一些新技术与软件工程的结合,形成了一种将工作分散的趋势。P2P计算正是这种分散工作趋势的结果。其次,在企业应用集成等因素的驱动下,过去十年渐渐形成从集中的单机系统转向分布式系统。然而随着互联网的发展,全面的分布式计算也就成为一种迫切需求。 关键词:局域网聊天 P2P java

Abstract With the development of the Internet,the chat tool as a communication tool, has been popularly accepted by netizens of all ages. At present, there are many powerful chat tools, of which Tencent QQ, MSN-Messager are much more prevalent. Instant messaging software is necessary for every one who connects to the internet, which can not only provide you a prompt way to find friends and partners online, but can provide you the convenience of internet relay chat and information delivering. Up to now, there are about 300 million people using real-time software all over the world. As more and more corporations have focused on this market with growing potential, which has hundreds of millions of uses, the competitions among these corporations are extremely fierce. The initial application of peer-to-peer network (peer-to-peer, referred to as P2P) is not the same as it is now. In fact, it can be regarded as a combination of different technologies and fashion trends. Below are the most important trends that have led the development of P2P technology: First of all, the integration of software engineering and new technologies led to a working dispersion trend. As a result, P2P computing was born. Then, in the past decade, it has turned fro m a single centralized system to distributed system due to the motivation of factors such as enterprise application integration. At last, with the development of the Internet, however, a comprehensive distributed computing has become an urgent need. Keywords:LAN chat P2P java

局域网内的多功能聊天室的设计与实现

JISHOU UNIVERSITY 专业课课程论文题目:局域网内的多功能聊天室的设计与实现 作者: 学号: 所属学院:信息科学与工程学院 专业年级: 总评分: 完成时间: 吉首大学信息科学与工程学院

局域网内的多功能聊天室的设计与实现 局域网内的多功能聊天室的设计与实现 (吉首大学信息科学与工程学院,湖南吉首 416000) 摘要 在计算机技术飞速发展的今天,随着Internet的普及和发展,人们的生活和工作也越来越离不开信息网络的支持,而聊天室是人们最常见、最直接的网上交流的方式。本论文主要研究一个以网络交友为主,为广大用户提供一个借助网络进行人际交往的信息平台。 本文所设计的局域网聊天系统是基于开放的WEB服务器应用程序开发设计的,其主要特征是能动态完成信息的传递且具有高效的交互性,有效的处理客户请求且具有更简单、更方便的数据库访问方法,易于维护和更新。这种技术程序由JAVA、HTML、数据库和脚本语言组合而成。主要功能模块包括:用户登录、注册部分;编写和显示聊天记录部分;管理员管理聊天室的管理部分。聊天系统编写和显示聊天记录部分界面友好,提供动作、表情、公聊或私聊等操作;管理部分可以删除不守规矩的注册用户、踢出在线用户以及删除某些不合时宜的聊天记录等、根据数据库需求分析,在ACCESS中定义3个表:用user表来存放注册用户信息、用activetable 表来存放当前在线用户信息以及用message表来存放聊天记录。本系统相比较其他信息交流平台具有开发方便、快捷,占用资源少,维护方便等优点。 【关键词】Java,数据库,脚本语言,聊天系

LAN of multi-function chat room design and Implementation Raotao (College of Information Science and Engineering,Jishou University,Jishou,Hunan 416000) Abstract The rapid development of computer technology today, with the popularity and development of Internet, people's work and life has become increasingly inseparable from the support of the information network, and the chat room is one of the most common, the most direct online communication mode.In this thesis, a network of friends, for the vast number of users with a network of have the aid of interpersonal information platform. The design of the LAN chat system is based on an open WEB server application development and design, its main characteristic is to complete the information transmission dynamically with high interactivity, effective customer request and has a more simple, more convenient database accessing method, easy maintenance and update.The technical program by JAVA, HTML, database and script language and combination.The main function modules include: user login, registration section; write and display chat recording part; the administrator manage the chat room management section.Chat system to prepare and display chat interface friendly, with action, expression, the public chat or operation; management can remove the unruly registered user, play online user and delete certain be inopportune or inappropriate chat records, according to the database needs analysis, defined in ACCESS 3: user table table for registered users of information, using activetable table to store the current online user information and the use of message table to store the chat record.This system is compared with other information exchange platform with the development of convenient, fast, less resource occupation, easy maintenance and other advantages. Key words:JA V A; data capture; information analysis ; Winpcap;Jpcap

Windows C语言构建网络聊天室

Windows C语言构建网络聊天室 利用C语言编写Windows应用程序有两种方式:一种是Windows C编程方式,另一种是Visual C++编程方式。在一般情况下,Visual C++编程方式编写的程序源代码量小、开发时的工作量小、工作难度也较小,但编译后的代码量较大,运行速度略低;而Windows C编程方式编写的程序源代码量虽然较大,但可执行代码效率高。随着技术的进步,Visual C++编程方式已被广泛采用,但象网络编程等一些对速度要求高、对硬件操作较多的程序,大多数还是用Windows C编程方式开发的。另外,学习Windows C 程序设计,还有助于更深入地了解Windows的内幕和Windows API。 基本的网络编程都是建立在Winsock基础上的。Winsock是90年代初,为了方便网络编程,由Microsoft联合了其他几家公司共同制定的一套WINDOWS下的网络编程接口,它是通过C语言的动态链接库方式提供给用户及软件开发者的,主要由winsock.h头文件和动态链接库winsock.dll组成,目前有两个版本:Winsock1.1和Winsock2.0。 作为网络编程接口,Winsock屏蔽了网络底层的复杂的协议和数据结构,使得编程人员对网络的操作变得非常简单,因此,在Win32平台上,访问众多的基层网络协议,Winsock是首选接口。 用Winsock构建一个网络聊天室,有两种基本的方式:数据报方式和流方式。 一、面向无连接的数据报方式 数据报方式又称无连接方式,对应的是UDP(User Datagram Protocol)协议。这种方式不提供数据无错保证,数据可能丢失或重复并且接收顺序混乱,后发出的报文可能会先收到,并且报文的长度是有限制的;不过,由于取消了重发校验机制,能够达到较高的通信速率,可以用于对数据可靠性要求不高的通信,如实时的语音、图像传送和广播消息等。 和C语言一样,函数是Windows C编程的最基本的单位。不过,Windows C主要使用API函数,而网络编程则主要使用Winsock提供的API函数。数据方式构建网络聊天室主要使用了以下几个函数:1.WSAStartup():初始化。 【函数原型】 int PASCAL FAR WSAStartup(WORD wV ersionRequired, LPWSADATA lpWSAData); 【使用说明】 每一个使用winsock的应用程序,都必须进行WSAStart函数调用,并且只有在调用成功之后才能使用其它的winsock网络操作函数。 返回值:调用成功返回0;否则,返回出错信息。 WversionRequired<输入>:表示欲使用的Winsock版本,这是一个WORD类型的整数,它的高位字节定义的是次版本号,低位字节定义的是主版本号。 LpWSAData<输出>:是一个指向WSADATA资料的指针。这个资料我们一般不使用。2.Socket():创建一个Socket。 【函数原型】 SOCKET socket(int af,int type,int proctocol); 【使用说明】 Winsock网络通信的第一步通常就是调用这个函数。所有的通信在建立之前都有要创建一个 Socket。该函数的功能与文件操作中的fopen()类似,返回值是由Winsock定义的一种数据类型 SOCKET,它实际是一个整型数据,是Socket创建成功时,Windows分配给程序的Socket编号,后面调用传输函数时,可以把它像文件指针样引用。如果Socket建立失败,返回值 WIV ALID_SOCKET。 Af<输入>:指address family(地址族),一般都填AF_INET,表示是在Internet上的Socket; Type<输入>::是Socket的类型,当采用流连接方式时,用SOCK_STREAM;采用数据报文方式时,用SOCK_DGRAM。

国内几款比较好用的局域网沟通工具

国内几款比较好用的局域网沟通工具 导读:我根据大家的需要整理了一份关于《国内几款比较好用的局域网沟通工具》的内容,具体内容:局域网聊天软件,简称LCS,它是一种面向企业局域网终端使用者的网络沟通工具服务,使用者可以通过安装了即时通信的终端机进行两人或多人之间的实时沟通。下面是我收集整理的,希望对大家有帮助~... 局域网聊天软件,简称LCS,它是一种面向企业局域网终端使用者的网络沟通工具服务,使用者可以通过安装了即时通信的终端机进行两人或多人之间的实时沟通。下面是我收集整理的,希望对大家有帮助~~ 工具/原料 电脑 局域网 方法/步骤 TOP 1 imo内网通 Imo内网通是一款完全免费局域网办公沟通软件。快捷方便是软件的最大特点,自动扫描在线用户,无需安装和配置各类打印机驱动程序,即刻实现客户端文件互传、远程播放和打印功能,成为企业、政府办公和家庭多媒体共享的有力工具。 而且基于内网,安全、可控。它将聊天信息全部留在用户本机,不经过互联网和服务器,不受监控,并对聊天信息通过AES技术进行加密,从源头上保证了用户的信息安全。完全兼容网上广为流传的飞鸽传书并比原来

飞鸽功能更加强大. 很多朋友钟爱imo内网通,不仅是因为内网通避免了私人信息对工作干扰,更因为内网通的即时通讯、话题讨论、时间管理等功能,使企业内部的沟通能有效传达,让有限的时间更加专注于工作。大幅提高工作效率。功能性:★★★★☆ 性价比:★★★(完全免费) 推荐指数:★★★★★ TOP 2 飞秋 飞秋(FeiQ)是一款局域网管理软件/局域网聊天软件的绿色软件,它参考了飞鸽传书(IPMSG)和QQ, 完全兼容飞鸽传书(IPMSG)协议,具有局域网传送方便,速度快,操作简单的优点,同时具有QQ中的一些功能,是飞鸽的完善代替者。 但是很遗憾的是,由于互联网的快速发展,人们的眼光早已从局域网转向了更加广阔的全球化互联网领域。大量的软件开发人员都投身到了互联网浪潮之中,而局域网这样的"小池塘",渐渐被一些开发人员所忽略。飞秋宣布停止更新后、市场上仅仅剩下imo内网通等为数不多几家仍然坚持提供局域网沟通服务。 功能性:★★★★★ 性价比:★★☆ 推荐指数:★★★★ TOP 3 飞鸽传书 飞鸽传书是一款局域网内部聊天、文件传输工具,在程序结构方面采

java编写的简单局域网聊天室(适合初学者).

import java.awt.BorderLayout; import java.awt.Button; import java.awt.Color; import java.awt.Dimension; import java.awt.Font; import java.awt.Frame; import java.awt.Panel; import java.awt.Point; import java.awt.TextArea; import java.awt.TextField; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.io.File; import java.io.FileWriter; import java.io.IOException; import https://www.360docs.net/doc/2b15478919.html,.DatagramPacket; import https://www.360docs.net/doc/2b15478919.html,.DatagramSocket; import https://www.360docs.net/doc/2b15478919.html,.InetAddress; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Scanner; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; public class GUI_Chat extends Frame { private static final long serialVersionUID = 1L; private TextArea viewTextArea = new TextArea(20, 1; private TextArea sendTextArea = new TextArea(; private TextField ipTextField = new TextField(20; private Button sendButton = new Button(" 发送" ; private Button clearButton = new Button(" 清屏" ; private Button logButton = new Button(" 记录" ; private Button shakeButton = new Button(" 震动" ; private Panel panel = new Panel(; private DatagramSocket socket ;

局域网聊天程序的实现

分类号:TP311.1 U D C:D10621-032-(2007)6165-0 密级:公开编号:2003032147 成都信息工程学院 学位论文 局域网的聊天程序的实现 论文作者姓名:吴剑辉 申请学位专业:网络工程 申请学位类别:工学学士 指导教师姓名(职称):王海春(教授) 论文提交日期:2007年06月10日

局域网的聊天程序的实现 摘要 网络通讯是目前计算机用户进行交流最普遍的方式,各种各样的聊天软件也层出不穷;服务提供商也提供了越来越丰富的通讯服务功能。本文介绍了在Windows环境下开发局域网聊天程序思路和方法。系统使用流行的Delphi7.0开发软件,采用Socket技术实现网络通讯。数据库使用Delphi自带的Database desktop。系统采用典型的C/S(服务器/客户端)构架。系统主要实现了用户注册、登录、聊天、服务器管理等功能。本系统从需求分析、系统的设计、具体功能的实现都严格遵循了软件设计工程的思想。 关键词: Socket; TCP/IP; C/S

The Implementation of LAN Chatting Program Abstract Network is the most popular way of communication between computer users, therefore a lot of chatting softwares come out; on the other hand, more communication services are provided by the ISP. This paper introduces the ideas and methods of LAN chatting program which are developed on Windows. This system is developed by the Delphi7.0 software, and uses the Socket technology to implement network communications. Database using its own database desktop. Software is based on C/S architecture. The system mainly implements the functions of user registration, login, chatting, server management etc.From requirement analysis, outline design, detailed design to coding, function test, the implementation of the function in this essay absolutely follow the process of the software development. Key words:Socket; TCP/IP; C/S

局域网聊天软件

通信软件设计三级项目任务书 一、题目:局域网聊天软件分析 二、班级: 三、小组成员: 四、起止时间:第六学期第十六周2012-6-4~2012-6-9 五、设计要求与思路: 通过Ethereal抓包,认真分析飞秋的工作原理、实现方法和工作协议等,并仿照飞秋、设计实现一个简单的局域网聊天软件,尽量能够做到与飞秋兼容。 设计思路:先使用飞秋,熟悉飞秋的功能;深入分析每一部分的功能实现;通过防火墙观察飞秋使用的套接字情况,并抓包分析飞秋在使用过程中的网络数据传输,分析飞秋的应用协议,分析设计实现简单的聊天软件,实现好友列表维护和文本消息传送等功能。 六、主要任务: 1、深入理解TCP和UDP的工作原理和服务的特性,掌握套接字编程机制和方法; 2、理解C/S架构和P2P两种应用模式; 3、深入分析飞秋的功能、工作原理、应用协议等; 4、完成局域网聊天软件的分析、开发与调试; 5、在设计报告中对飞秋进行全面和深入的剖析; 6、按照格式要求撰写设计报告。 学生(签字): 指导教师(签字): 系主任(签字):院长(签字):

1、设计要求与任务 通过Ethereal抓包,认真分析飞秋的工作原理、实现方法和工作协议等,并仿照飞秋、设计实现一个简单的局域网聊天软件,尽量能够做到与飞秋兼容。 先使用飞秋,熟悉飞秋的功能;深入分析每一部分的功能实现;通过防火墙观察飞秋使用的套接字情况,并抓包分析飞秋在使用过程中的网络数据传输,分析飞秋的应用协议,分析设计实现简单的聊天软件,实现好友列表维护和文本消息传送等功能。主要任务:深入理解TCP和UDP的工作原理和服务的特性,掌握套接字编程机制和方法;理解C/S架构和P2P两种应用模式;深入分析飞秋的功能、工作原理、应用协议等;完成局域网聊天软件的分析、开发与调试;在设计报告中对飞秋进行全面和深入的剖析。 2、设计正文 2.1、飞秋分析 飞秋是一款局域网聊天传送文件的绿色软件,它参考了飞鸽传书(IPMSG)和QQ, 完全兼容飞鸽传书(IPMSG)协议,具有局域网传送方便,速度快,操作简单的优点,同时具有QQ中的一些功能,是飞鸽的完善代替者,另外,飞秋支持语音,远程协助群聊天(不需要服务器),它参考了飞鸽传书(FreeEIM)和QQ, 完全兼容飞鸽传书协议,具有局域网传送方便,速度快,操作简单的优点,同时具有QQ中的一些功能。 2.1.1、飞秋的工作原理 上线通知:对于飞秋而言,最关键的是局域网用户列表的建立;飞秋启动时使用UDP协议向255.255.255.255这个广播地址发送广播包,默认端口是2425。广播包内容包含用户名、工作组、主机名、IP等信息;已启动飞秋的用户通过2425端口收到此广播包后,就会在自己的用户列表中添加这个用户的用户名、工作组等信息,同时向对方IP发送本机用户的个人信息;从而双方都能建立起用户列表。 聊天过程:飞秋在刷新用户列表时发送的广播包和启动时差不多,只不过返回的标识信息略有不同;可以做一个小工具,监控2425端口内存流,就能截获刷新和聊天时的消息。飞秋在传送聊天信息时同样使用UDP协议;由于UDP协议是无连接协议,传输速度快,但是没有确认机制,是不可靠的协议,需要自己定义返回信息的标志来判断对方是否收到信息。 离线通知:用户离线时发送一个离线广播包到255.255.255.255,收到此广播包的用户,根据包中的IP地址(也可能是多种判断标志或者包含硬件标识,比如网卡地址等)删除对方的用户列表信息;

网络聊天室(CS)模式

Java课程设计报告 题目网络聊天室(C/S模式) 所在院系软件学院 学生姓名孙丕军专业机械+软件 班级R机械085 学号 0818030512 2009年7 月17日

第一章总体设计 1.1本系统的主要功能 本系统设计C/S模式的网络聊天室,即使用客户端的JAVA应用程序和服务器进行通信. 1.2系统包含的类及类之间的关系 本系统共包括12个java源文件。 如图1-1所示。

图1-1 类之间依赖的关系 2.2 java源文件及其功能 客户端: HELP.JA V A 该文件生成的类负责创建一个帮助对话框。当用户不知怎么使用时,可以从这获得帮助。用户可以用mouse点击菜单栏上的帮助(H)选项,也可以按下快捷键Ctrl+H 来显示帮助对话框。 USERCONF.JA V A 该文件生成的类负责用来设置用户昵称的。默认的为匆匆过客。可以通过点击工具栏上的用户设置,也可以点击菜单栏上的设置中的用户设置来弹出用户设置对话框。当提交时,按下保存时,若没有输入或输入的字符超过15字符时,均为无效输入。

CONNECTCONF.JA V A 该类负责生成一个连接对话框。让用户输入服务器的IP地址和要连接的端口号。以便与服务器连接。连接IP时,由于我们的服务器和客户端均在同一台机器上,所以IP可以是127.0.0.1。端口号必须是在0—65535之间的一个数。上面两者均为正确时,才算是连接设置是正确的。否则会弹出一个错误对话框。 CLIENTRECEIVE.JA V A 该类为客户端的消息收发类,单独把它作为一个类,是因为这样可以为每一个用户启动一个线程。避免在一个主线程中引起堵塞。在run 方法中包括了对服务器发来的消息的处理。 CHATCLIENT.JA V A(客户端主类) 该类为客户端的主类。与服务器进行通话时,需要启动这个文件。该类包括了一个复杂的GUI界面的设计。对菜单栏上的选项都设有快捷键。当所有工作都准备好了之后,点击登录。即可启动一个连接服务器的线程。与服务器进行会话。若有多个用户想要参与会话,可以启动多个CHATCLIENT。每一个用户将有一个自己的聊天界面。用户可以相互之间聊,也可以与某一个人进行私聊。若想换一个名字进行聊天,可以点击注销,然后重新设置用户名来聊天。 服务器端: HELP.JA V A 该类与客户端的HELP.JA V A类大致一样的。在显示的内容块有一点不同而已。 PORTCONF.JA V A 这个类是一个端口配置类,有服务器设置一个监听端口。让用户连接。但端口必须正确,也就是就端口应是在0—65535之间的一个数。且与用户连接时设置的端口必须一致。 NODE.JA V A 该类是用户链表的结点类,它把用户的名字,socket, ObjectOutputStream,ObjectOutStream.封装在一起。为后面使用用户链表做准备。 有利于后面工作的简单。 USERLINKLIST.JAVA 本类并没有使用JDK自带包中的数据结构类,而是自己将

相关文档
最新文档