当前位置:文档之家› JAVA聊天室附完整代码

JAVA聊天室附完整代码

JAVA聊天室附完整代码
JAVA聊天室附完整代码

专业课程设计I

基于JAVA的聊天室设计与实现

一、课题内容和要求

基于网络的文本交互软件的设计和实现,设计和实现一个简单的基于网络的文本消息发送和接收软件。基本要求:该软件能实现文本消息发送和接收功能。提高要求(1):支持以多播方式发送文本消息,提高要求(2):性能稳定,界面友好。按课程设计报告的要求写出详细的设计和实现报告。

二、设计思路分析

聊天室是一项进行文本交互的软件,应用广泛,并且实用性强的一个非常典型的人机交互系统。在信息世界里,聊天工具的使用是非常频繁的,如MSN、QQ、校内通之类的聊天工具许多人都正在使用。此次设计的聊天室系统主要针对文本信息的传送和接收,不能像QQ一样进行图片、音频、视频等文件的传输。虽然其功能简单,但是在开发技术和过程中,能够充分学习和使用JA V A的技术,进一步培养了面向对象程序设计的思想,加深对面向对象程序设计四大特性的理解。

人们日常生活中越来越多地使用聊天室这项应用来为自己的工作和学习服务。一个操作简单,界面友好、运行稳定的聊天室对于小型局域网的用户可以起到很好的交流作用。所谓聊天室就是一个可以让许多用户同时互相通信的网上园地,个人用户可以通过聊天室将自己融入整个主流社会中。

根据目前使用聊天室的用户需求显示,用户对于聊天室主要有以下几点要求:

(1)聊天功能:可以实时接收和发送信息,并能支持公聊和私聊的的方式,能够查看聊天记录,聊天过程中能对字体、表情等进行设定等。

(2)用户功能:可以随时注册和登录及注销,并能选择性加好友和删除好友以及查看对方的开放信息,还能看到对方的登录状态。

(3)文件传输功能:用户可以共享资源,能发送及接收文件。

(4)保密功能:用户可以设定自己的保密状态,使某些信息对于其他用户是不可见的。

(5)系统稳定:客户端与服务端的连接稳定,不出现或者少出现连接不上的情况。

三、概要设计

1、聊天室的简要功能介绍

该简易聊天室是为许多喜爱聊天的用户开发设计的,和许多大型的网络聊天室相比该小聊天室功能比较简单,但能实现基本的聊天功能,点对多、点对点聊天和基本的用户功能,登录、注销、查看在线用户等。

(1) 用户设置:

功能描述:用户自定义自己的登录名,成功设置后,服务端能接收到新设置的用户名;

(2) 登录功能:

功能描述:在服务端开启的情况下,用户可以以自己自定义或者默认的登录名和登录地址端口登录到客户端,并能在服务器端显示登录状态;

(3) 公聊:

功能描述:用户在聊天室中可以选择与“所有人”聊天,聊天室中的其他在线用户可以正常接收并正确显示公聊消息。

(4) 私聊:

功能描述:用户可以选择与聊天室的在线用户列表中的其他用户聊天。双方的聊天记录对于聊天室的其他用户是不可见的。

(5) 聊天心情:

功能描述:用户在聊天的过程中可以选择相应的心情来表达自己的情感。

(6) 系统消息:

功能描述:服务端正常运行的过程中,在聊天室的每一个用户都能接收服务器端发送的信息提示信息。

(7) 用户的状态.

功能描述:每一个客户端用户都可以实时看到目前其他在线用户的状态。

(8) 用户注销:

功能描述:用户可以注销自己的账号,并重新登记登录名和地址。

(9) 用户退出:

功能描述:用户可以在正常情况下退出聊天室。

(10) 服务端控制:

功能描述:只有在服务端开启的情况下,用户才能登陆成功和聊天;用户设置的地址端口也必须与服务端的侦听端口一致,否则不能登录。

2、模块描述

本聊天室分为聊天室服务端和聊天室客户端,服务端与客户端之间通过套接口Socket(TCP)连接。在java中使用套接口相当简单,Java API为处理套接口的通信提供了一个类https://www.doczj.com/doc/ee8863223.html,.Socket.,使得编写网络应用程序相对容易.服务器采用多线程以满足多用户的请求,通过JDBC与后台数据库连接,并通过创建一个ServerSocket对象来监听来自客户的连接请求,默认IP地址为:127.0.0.1默认端口为8888。

(1) 聊天室服务端模块图:

端口服务:输入要侦听的端口,默认为8888;

启动服务:启动服务器,并开始在设置的端口中侦听,客户端用户可以登录并开始聊天;

停止服务:关闭服务器,侦听结束。客户端用户不能再聊天;

发送系统消息:服务器端给所有人或者个别用户发送消息。

消息显示:可以显示所有用户的聊天记录,和上线、下线信息。

退出服务器:退出程序,并停止服务;

(2)聊天室客户端模块图:

用户设置:用户可以设置自己的用户名进行聊天;

连接设置:用户可以设置自己的服务器的IP地址和端口号,默认的连接地址为:127.0.0.1:8888;

用户登录:只能在聊天室服务端已开启的情况下,用户才能登录,用户登录之后才能开始聊天,登录后不能再修改用户设置和连接设置;

用户注销:退出聊天,可以继续修改用户设置和连接设置;

发送和接收聊天信息:用户可以给所有人或者个别用户发送信息,并能看到其他用户发送给自己或所有人的消息;

退出:关闭所有聊天并退出客户端。

(3) 流程图

四、详细设计

聊天室服务端主要包括7个文件,它们的功能如下:

(1)ChatServer.java:包含名为ChatServer的public类,其主要功能为定义服务器端的界面,添加事件侦听与事件处理。调用ServerListen类来实现服务端用户上线与下线的侦听,调用ServerReceive类来实现服务器端的消息的收发。

(2)ServerListen.java:该类实现服务端用户上线与下线的侦听。该类对用户上线下线的侦听是通过调用用户链表类(UserLinkList)来实现的,当用户上线与下线情况发生变化时,该类会对主类的界面进行相应的修改。

(3)ServerReceive.java:该类是实现服务器端的消息的收发的类。该类分别定义了向某用户及所有人发送消息的方法,发送的消息会显示在主界面类的界面上。

(4)PortConf.java:该类继承自JDialog,是用户对服务器端侦听端口进行修改配置的类。

(5)Node.java:用户链表的节点类,定义了链表中的用户。该类与前面所讲的链表节点Node类的功能相当。

(6)UserLinkList.java:用户链表节点的具体实现类。该类通过构造函数构造用户链表,定义了添加用户,删除用户、返回用户数、根据用户名查找用户、根据索引查找用户这5个方法。

(7)Help.java:服务端程序的帮助类。

2、聊天室客户端设计:

聊天室客户端主要包括5个文件,它们的功能如下:

(1)ChatClient.java:包含名为ChatClient的public类,其主要功能为定义客户端的界面,添加事件侦听与事件处理。该类定义了Connect()与DisConnect()方法实现与服务器的连接与断开连接。当登录到指定的服务器时,调用

ClientReceive类实现消息收发,同时该类还定义了SendMessage()方法来向其他用户发送带有表情的消息或者悄悄话。

(2)ClientReceive.java:该类是实现服务器端与客户端消息收发的类。

(3)ConnectConf.java:该类继承自JDialog,是用户对所要连接的服务器IP 及侦听端口进行修改配置的类。

(4)UserConf.java:该类继承自JDialog,是用户对连接到服务器所显示的用户名进行修改配置的类。

(5)Help.java:客户端程序的帮助类。

五、测试数据及其结果分析

1、首先运行ChatServer工程文件,会出现如下画面

2、选择端口设置,可以设置您要侦听的端口号,不设置将默认端口号为8888;

3、选择启动服务,服务器开始在您刚才设置的端口中侦听;

4、运行ChatClient工程文件,打开如下画面

5、选择用户设置可以设置自己的登录名

6、选择连接设置可以设置您的IP地址和端口号

7、选择登录进入聊天室并可以开始跟所有人或者个别其他用户聊天,其中可以

选择心情等;

8、在服务端也可以选择给所有人或者个别用户发送消息;

9、多人聊天的服务器端与客户端情况

代码如下:

package liaotian;

/**

* 用户链表

*/

public class UserLinkList { Node root;

Node pointer;

int count;

/**

* 构造用户链表

*/

public UserLinkList(){

root = new Node();

root.next = null;

pointer = null;

count = 0;

}

/**

* 添加用户

*/

public void addUser(Node n){

pointer = root;

while(pointer.next != null){

pointer = pointer.next;

}

pointer.next = n;

n.next = null;

count++;

}

/**

* 删除用户

*/

public void delUser(Node n){

pointer = root;

while(pointer.next != null){

if(pointer.next == n){

pointer.next = n.next;

count --;

break;

}

pointer = pointer.next;

}

}

/**

* 返回用户数

*/

public int getCount(){

return count;

}

/**

* 根据用户名查找用户

*/

public Node findUser(String username){

if(count == 0) return null;

pointer = root;

while(pointer.next != null){

pointer = pointer.next;

if(https://www.doczj.com/doc/ee8863223.html,ername.equalsIgnoreCase(username)){ return pointer;

}

}

return null;

}

/**

* 根据索引查找用户

*/

public Node findUser(int index){

if(count == 0) {

return null;

}

if(index < 0) {

return null;

}

pointer = root;

int i = 0;

while(i < index + 1){

if(pointer.next != null){

pointer = pointer.next;

}

else{

return null;

}

i++;

}

return pointer;

}

}

package liaotian;

import java.awt.*;

import java.awt.event.*;

import java.io.*;

import https://www.doczj.com/doc/ee8863223.html,.*;

import javax.swing.*;

/*

* 聊天客户端的主框架类

*/

public class ChatClient extends JFrame implements ActionListener{ /**

*

*/

private static final long serialVersionUID = 1L;

String ip = "127.0.0.1";//连接到服务端的ip地址

int port = 8888;//连接到服务端的端口号

String userName = "狂狂";//用户名

int type = 0;//0表示未连接,1表示已连接

JComboBox combobox;//选择发送消息的接受者

JTextArea messageShow;//客户端的信息显示

JScrollPane messageScrollPane;//信息显示的滚动条

JLabel express,sendToLabel,messageLabel ;

JTextField clientMessage;//客户端消息的发送

JCheckBox checkbox;//悄悄话

JComboBox actionlist;//表情选择

JButton clientMessageButton;//发送消息

JTextField showStatus;//显示用户连接状态

Socket socket;

ObjectOutputStream output;//网络套接字输出流

ObjectInputStream input;//网络套接字输入流

ClientReceive recvThread;

//建立菜单栏

JMenuBar jMenuBar = new JMenuBar();

//建立菜单组

JMenu operateMenu = new JMenu ("操作(O)");

//建立菜单项

JMenuItem loginItem = new JMenuItem ("用户登录(I)",new ImageIcon("face/98.gif"));

JMenuItem logoffItem = new JMenuItem ("用户注销(L)",new ImageIcon("face/icon.gif"));

JMenuItem exitItem=new JMenuItem ("退出(X)",new ImageIcon("face/smile.gif"));

JMenu conMenu=new JMenu ("设置(C)");

JMenuItem userItem=new JMenuItem ("用户设置(U)",new ImageIcon("face/messenger_big.gif"));

JMenuItem connectItem=new JMenuItem ("连接设置(C)",new ImageIcon("face/Uabrand.gif"));

JMenu helpMenu=new JMenu ("帮助(H)");

JMenuItem helpItem=new JMenuItem ("帮助(H)",new ImageIcon("face/HelpCenter.gif"));

//建立工具栏

JToolBar toolBar = new JToolBar();

//建立工具栏中的按钮组件

JButton loginButton;//用户登录

JButton logoffButton;//用户注销

JButton userButton;//用户信息的设置

JButton connectButton;//连接设置

JButton exitButton;//退出按钮

//框架的大小

Dimension faceSize = new Dimension(400, 600);

JPanel downPanel ;

GridBagLayout girdBag;

GridBagConstraints girdBagCon;

public ChatClient(){

init();//初始化程序

//添加框架的关闭事件处理

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

this.pack();

//设置框架的大小

this.setSize(faceSize);

this.setVisible(true);

setIconImage(getToolkit().getImage("face/love.gif"));

//设置运行时窗口的位置

Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();

this.setLocation( (int) (screenSize.width - faceSize.getWidth()) / 2,

(int) (screenSize.height - faceSize.getHeight()) / 2);

this.setResizable(false);

this.setTitle("聊天室客户端"); //设置标题

//为操作菜单栏设置热键'V'

operateMenu.setMnemonic('O');

//为用户登录设置快捷键为ctrl+i

loginItem.setMnemonic ('I');

loginItem.setAccelerator (KeyStroke.getKeyStroke (KeyEvent.VK_I,InputEvent.CTRL_MASK));

//为用户注销快捷键为ctrl+l

logoffItem.setMnemonic ('L');

logoffItem.setAccelerator (KeyStroke.getKeyStroke (KeyEvent.VK_L,InputEvent.CTRL_MASK));

//为退出快捷键为ctrl+x

exitItem.setMnemonic ('X');

exitItem.setAccelerator (KeyStroke.getKeyStroke (KeyEvent.VK_X,InputEvent.CTRL_MASK));

//为设置菜单栏设置热键'C'

conMenu.setMnemonic('C');

//为用户设置设置快捷键为ctrl+u

userItem.setMnemonic ('U');

userItem.setAccelerator (KeyStroke.getKeyStroke (KeyEvent.VK_U,InputEvent.CTRL_MASK));

//为连接设置设置快捷键为ctrl+c

connectItem.setMnemonic ('C');

connectItem.setAccelerator (KeyStroke.getKeyStroke (KeyEvent.VK_C,InputEvent.CTRL_MASK));

//为帮助菜单栏设置热键'H'

helpMenu.setMnemonic('H');

//为帮助设置快捷键为ctrl+p

helpItem.setMnemonic ('H');

helpItem.setAccelerator (KeyStroke.getKeyStroke (KeyEvent.VK_H,InputEvent.CTRL_MASK));

}

/**

* 程序初始化函数

*/

public void init(){

Container contentPane = getContentPane();

contentPane.setLayout(new BorderLayout());

//添加菜单栏

operateMenu.add (loginItem);

operateMenu.add (logoffItem);

operateMenu.addSeparator();

operateMenu.add (exitItem);

jMenuBar.add (operateMenu);

conMenu.add (userItem);

conMenu.addSeparator();

conMenu.add (connectItem);

jMenuBar.add (conMenu);

helpMenu.add (helpItem);

jMenuBar.add (helpMenu);

setJMenuBar (jMenuBar);

//初始化按钮

loginButton = new JButton("登录");

logoffButton = new JButton("注销");

userButton = new JButton("用户设置" );

connectButton = new JButton("连接设置" );

exitButton = new JButton("退出" );

//当鼠标放上显示信息

loginButton.setToolTipText("连接到指定的服务器");

logoffButton.setToolTipText("与服务器断开连接");

userButton.setToolTipText("设置用户信息");

connectButton.setToolTipText("设置所要连接到的服务器信息"); //将按钮添加到工具栏

toolBar.add(userButton);

toolBar.add(connectButton);

toolBar.addSeparator();//添加分隔栏

toolBar.add(loginButton);

toolBar.add(logoffButton);

toolBar.addSeparator();//添加分隔栏

toolBar.add(exitButton);

contentPane.add(toolBar,BorderLayout.NORTH);

checkbox = new JCheckBox("悄悄话");

checkbox.setSelected(false);

actionlist = new JComboBox();

actionlist.addItem("微笑地");

actionlist.addItem("高兴地");

actionlist.addItem("轻轻地");

actionlist.addItem("生气地");

actionlist.setSelectedIndex(0);

//初始时

loginButton.setEnabled(true);

logoffButton.setEnabled(false);

//为菜单栏添加事件监听

loginItem.addActionListener(this);

logoffItem.addActionListener(this);

exitItem.addActionListener(this);

userItem.addActionListener(this);

connectItem.addActionListener(this);

helpItem.addActionListener(this);

//添加按钮的事件侦听

loginButton.addActionListener(this);

logoffButton.addActionListener(this);

userButton.addActionListener(this);

connectButton.addActionListener(this);

exitButton.addActionListener(this);

combobox = new JComboBox();

combobox.insertItemAt("所有人",0);

combobox.setSelectedIndex(0);

messageShow = new JTextArea();

messageShow.setEditable(false);

//添加滚动条

messageScrollPane = new JScrollPane(messageShow, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,

JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); messageScrollPane.setPreferredSize(new Dimension(400,400)); messageScrollPane.revalidate();

clientMessage = new JTextField(23);

clientMessage.setEnabled(false);

clientMessageButton = new JButton();

clientMessageButton.setText("发送");

//添加系统消息的事件侦听

clientMessage.addActionListener(this); clientMessageButton.addActionListener(this);

sendToLabel = new JLabel("发送至:");

express = new JLabel(" 表情: ");

messageLabel = new JLabel("发送消息:");

downPanel = new JPanel();

girdBag = new GridBagLayout();

downPanel.setLayout(girdBag);

girdBagCon = new GridBagConstraints();

girdBagCon.gridx = 0;

girdBagCon.gridy = 0;

girdBagCon.gridwidth = 5;

girdBagCon.gridheight = 2;

girdBagCon.ipadx = 5;

girdBagCon.ipady = 5;

JLabel none = new JLabel(" ");

girdBag.setConstraints(none,girdBagCon);

downPanel.add(none);

girdBagCon = new GridBagConstraints();

girdBagCon.gridx = 0;

girdBagCon.gridy = 2;

girdBagCon.insets = new Insets(1,0,0,0);

//girdBagCon.ipadx = 5;

//girdBagCon.ipady = 5;

girdBag.setConstraints(sendToLabel,girdBagCon);

downPanel.add(sendToLabel);

girdBagCon = new GridBagConstraints(); girdBagCon.gridx =1;

girdBagCon.gridy = 2;

girdBagCon.anchor = GridBagConstraints.LINE_START; girdBag.setConstraints(combobox,girdBagCon); downPanel.add(combobox);

girdBagCon = new GridBagConstraints(); girdBagCon.gridx =2;

girdBagCon.gridy = 2;

girdBagCon.anchor = GridBagConstraints.LINE_END; girdBag.setConstraints(express,girdBagCon); downPanel.add(express);

girdBagCon = new GridBagConstraints(); girdBagCon.gridx = 3;

girdBagCon.gridy = 2;

girdBagCon.anchor = GridBagConstraints.LINE_START; //girdBagCon.insets = new Insets(1,0,0,0);

//girdBagCon.ipadx = 5;

//girdBagCon.ipady = 5;

girdBag.setConstraints(actionlist,girdBagCon); downPanel.add(actionlist);

girdBagCon = new GridBagConstraints(); girdBagCon.gridx = 4;

girdBagCon.gridy = 2;

girdBagCon.insets = new Insets(1,0,0,0);

//girdBagCon.ipadx = 5;

//girdBagCon.ipady = 5;

girdBag.setConstraints(checkbox,girdBagCon); downPanel.add(checkbox);

girdBagCon = new GridBagConstraints(); girdBagCon.gridx = 0;

girdBagCon.gridy = 3;

girdBag.setConstraints(messageLabel,girdBagCon); downPanel.add(messageLabel);

girdBagCon = new GridBagConstraints(); girdBagCon.gridx = 1;

girdBagCon.gridy = 3;

girdBagCon.gridwidth = 3;

girdBagCon.gridheight = 1;

girdBag.setConstraints(clientMessage,girdBagCon);

downPanel.add(clientMessage);

girdBagCon = new GridBagConstraints();

girdBagCon.gridx = 4;

girdBagCon.gridy = 3;

girdBag.setConstraints(clientMessageButton,girdBagCon);

downPanel.add(clientMessageButton);

showStatus = new JTextField(35);

showStatus.setEditable(false);

girdBagCon = new GridBagConstraints();

girdBagCon.gridx = 0;

girdBagCon.gridy = 5;

girdBagCon.gridwidth = 5;

girdBag.setConstraints(showStatus,girdBagCon);

downPanel.add(showStatus);

contentPane.add(messageScrollPane,BorderLayout.CENTER);

contentPane.add(downPanel,BorderLayout.SOUTH);

//关闭程序时的操作

this.addWindowListener(

new WindowAdapter(){

public void windowClosing(WindowEvent e){

if(type == 1){

DisConnect();

}

System.exit(0);

}

});

}

/**

* 事件处理

*/

public void actionPerformed(ActionEvent e) {

Object obj = e.getSource();

if (obj == userItem || obj == userButton) { //用户信息设置//调出用户信息设置对话框

UserConf userConf = new UserConf(this,userName);

userConf.setVisible(true);

userName = https://www.doczj.com/doc/ee8863223.html,erInputName;

聊天室代码(C#)

实现用C#做一个聊天室客户端的代码: using System; using System.Collections.Generic; using https://www.doczj.com/doc/ee8863223.html,ponentModel; using System.Data; using System.Drawing; using System.Text; using https://www.doczj.com/doc/ee8863223.html,; using https://www.doczj.com/doc/ee8863223.html,.Sockets; using System.Windows.Forms; namespace EasyChat { public partial class login_frm : Form { ///

/// IP地址 /// private IPAddress _ipAddr; #region登录窗体构造函数 /// ///构造函数,自动生成 /// public login_frm() { InitializeComponent(); } #endregion #region登录窗体的私有方法 /// ///验证登录信息 /// ///验证结果 private bool ValidateInfo() {

if (user_tb.Text.Trim() == string.Empty) { MessageBox.Show("请填写用户名!", "提示", MessageBoxButtons.OK, https://www.doczj.com/doc/ee8863223.html,rmation); return false; } if (!IPAddress.TryParse(svrip_tb.Text, out _ipAddr)) { MessageBox.Show("IP地址不合法!", "提示", MessageBoxButtons.OK, https://www.doczj.com/doc/ee8863223.html,rmation); return false; } int _port; if (!int.TryParse(svrport_tb.Text, out _port)) { MessageBox.Show("端口号不合法!", "提示", MessageBoxButtons.OK, https://www.doczj.com/doc/ee8863223.html,rmation); return false; } else { if (_port < 1024 || _port > 65535) { MessageBox.Show("端口号不合法!", "提示", MessageBoxButtons.OK, https://www.doczj.com/doc/ee8863223.html,rmation); return false; } } return true; } ///

///取消,关闭窗体 /// ///

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)进行数据交流,初步掌握网络聊天通信程序的设计方法。并能巩固和扩展大学期间的学习内容,进行项目的设计开发训练,更好的适应社会的需求。

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

Java程序课程设计任务书 JAVA聊天室的系统的设计与开发 1.主要内容: 用JA V A实现基于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平台上,系统的设计使用了面向对象技术和面向对象的设计原则。系统采用C/S结构,客户端与客户端以及客户端与服务器端之间通过Socket传送消息。使用JAVA语言编写,开发工具采用Eclipse。服务器端设计与实现过程中,采用了多线程技术,可以在单个程序当中同时运行多个不同的线程,执行不同的任务。大大增强了程序对服务器资源的利用。 聊天系统完成后将可进行多人对多人的聊天,对好友进行添加、删除,对新用户的注册,发送消息、接受消息等等功能。 关键词:多线程;客户机/服务器;JA V A ;Socket ;Eclipse ;TCP/IP

Java源代码___聊天室

Java 聊 天 室 制作人:_____杨永生_____ 制作时间:2012.9.26 目录 1本文简介 (2) 2聊天室截图与说明 (2) 2.1用Java编译: (2) 2.2服务器登录界面 (2) 2.3服务器窗口 (2) 2.4客服端登录界面 (3) 2.5客服端窗口 (3) 3服务器端 (6) 3.1MyServer()方法 (6) 3.2Login()方法 (10) 3.3Time()方法 (13) 4客户端 (14) 4.1MyClient()方法 (14) 4.2Login()方法 (18) 4.3Time()方法 (20)

1 本文简介 这是一个简单的Java聊天室,仅提供给一些刚学Java的学生做实验,本文也是仅供参考. 本文代码都有注释,希望读者能读懂代码,本实验内部还有一些错误,比如只能一条一条的发信息,不能连发,希望能解决本问题的朋友能给我发信息,我的QQ号就是百度号! 2 聊天室截图与说明 2.1 用Java编译: 本代码有七个类,放在六个java文件中,类名在下方希望读者自己观看, 2.2 服务器登录界面 要先运行服务器端的程序 用户名:y 密码:1 用户名密码可以自己设定点击确定可以登录,2秒后到服务端界面 2.3 服务器窗口

聊天室的IP为本机的网络虚拟IP,在任何电脑上都能用,端口应设置在1024以后, 2.4 客服端登录界面 和服务器端的登录一样 2.5 客服端窗口

当登录上后客服端就显示已经连接了,此时服务器端的窗口如下

由于本程序设计的不是很完整,具体的聊天要先从客服端开始: 在客服端输入一条聊天内容后按确定,在服务器端就可以收到信息,之后客户端不能输入了,要等待服务器端来信息后才能继续输入信息. 想要结束聊天,直接可以关闭窗口,也可以输入’bye’后断开聊天

网络编程聊天室主要代码

聊天室客户端主要代码 CSocket.h class CChat_ClientDlg; //dlg类声明 class CCSocket : public CSocket { DECLARE_DYNAMIC(CCSocket); //动态类声明 public: CCSocket(CChat_ClientDlg* pDlg); //添加构造函数的入口函数 virtual ~CCSocket(); CChat_ClientDlg* m_pDlg;//指向对话框的指针变量。 virtual void OnReceive(int nErrorCode); //CSocket类添加的事件响应函数 }; CSokcet.cpp #include"stdafx.h" #include"Chat_Client.h" #include"CSocket.h" #include"Chat_ClientDlg.h" //自行添加的头文件,调用到dlg类的成员函数。 IMPLEMENT_DYNAMIC(CCSocket,CSocket) //动态类声明 // CCSocket构造函数、析构函数 CCSocket::CCSocket(CChat_ClientDlg* pDlg) { m_pDlg=pDlg; //初始化对话框指针变量 } CCSocket::~CCSocket() { m_pDlg=NULL; } // CCSocket 成员函数

void CCSocket::OnReceive(int nErrorCode) { // TODO: 在此添加专用代码和/或调用基类 CSocket::OnReceive(nErrorCode); if(nErrorCode==0) m_pDlg->OnReceive(); //调用对话框类的对应函数} CChat_ClientDlg.h #pragma once #include"afxwin.h" #include"Msg.h" //自行添加的包含头文件 #include"CSocket.h" //自行添加的包含头文件 class CCSocket; //自行添加的类声明 // CChat_ClientDlg 对话框类构造函数、析构函数 …… …… protected: HICON m_hIcon; // 生成的消息映射函数 virtual BOOL OnInitDialog(); afx_msg void OnSysCommand(UINT nID, LPARAM lParam); afx_msg void OnPaint(); afx_msg HCURSOR OnQueryDragIcon(); afx_msg void OnBnClickedButtonConnect(); //按钮单击事件响应函数声明 afx_msg void OnBnClickedButtonClose(); afx_msg void OnBnClickedButtonSend(); afx_msg void OnDestroy(); //对话框销毁事件响应函数声明DECLARE_MESSAGE_MAP() public: CString m_strSName; // 服务器名称 CString m_strCName; // 客户名称 //控件变量 UINT m_nPort; // 端口号,即聊天室频道 CButton m_btnConnect; CButton m_btnClose; CString m_strMsg;

C#聊天室代码

C#是微软随着https://www.doczj.com/doc/ee8863223.html,新推出的一门语言。它作为一门新兴的语言,有着C++的强健, 又有着VB等的RAD特性。而且,微软推出C#主要的目的是为了对抗Sun公司的Java。大家都知道Java语言的强大功能,尤其在网络编程方面。于是,C#在网络编程方面也自然不甘落后于人。本文就向大家介绍一下C#下实现套接字(Sockets)编程的一些基本知识,以期能使大家对此有个大致了解。首先,我向大家介绍一下套接字的概念。 套接字基本概念: 套接字是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元。可以将套接字看作不同主机间的进程进行双向通信的端点,它构成了单个主机内及整个网络间的编程界面。套接字存在于通信域中,通信域是为了处理一般的线程通过套接字通信而引进的一种抽象概念。套接字通常和同一个域中的套接字交换数据(数据交换也可能穿越域的界限,但这时一定要执行某种解释程序)。各种进程使用这个相同的域互相之间用Internet协议簇来进行通信。 套接字可以根据通信性质分类,这种性质对于用户是可见的。应用程序一般仅在同一类的套接字间进行通信。不过只要底层的通信协议允许,不同类型的套接字间也照样可以通信。套接字有两种不同的类型:流套接字和数据报套接字。 套接字工作原理: 要通过互联网进行通信,你至少需要一对套接字,其中一个运行于客户机端,我们称之为ClientSocket,另一个运行于服务器端,我们称之为ServerSocket。 根据连接启动的方式以及本地套接字要连接的目标,套接字之间的连接过程可以分为三个步骤:服务器监听,客户端请求,连接确认。 所谓服务器监听,是服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态。 所谓客户端请求,是指由客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向服务器端套接字提出连接请求。 所谓连接确认,是指当服务器端套接字监听到或者说接收到客户端套接字的连接请求,它就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客户端,一旦客户端确认了此描述,连接就建立好了。而服务器端套接字继续处于监听状态,继续接收其他客户端套接字的连接请求。 C#中的套接字编程实例:

聊天室介绍(实现原理基本流程等)

聊天室介绍: ---- 聊天室基本原理是,抛开OGI和WWW服务器,根据HTML规范,接收到浏览器的请求以后,模仿WWW服务器的响应,将聊天内容发回浏览器。在浏览器看来就像浏览一个巨大的页面一样始终处于页面联接状态,这就是一个专门的聊天服务器,一个简化了的WWW服务器。 ----这样相比CGI方式来说,聊天室的优点就很明显: 不需要专门的WWW服务器,在聊天服务器里完成必要的工作,避开耗时的CGI 过程。 如果使用单进程服务器,就不需要每次产生新进程。 数据交换完全在内存中进行,不用读写文件。 不需要定时刷新,减少屏幕的闪烁,减少对服务器的请求次数。 ----下面我们来看看具体实现流程。 一、聊天服务器实现流程 ----用户数据输入都是通过URL传送,下面是几个URL实例,结合后面客户端流程,可以更好地理解系统结构。 ----这是一个用户名密码均为…aaa''''的聊天用户登录系统,说了一句话“hello”,然后退出所产生的一系列请求,其中密码用系统函数crypt加密过: 二、客户端具体登录过程 ---- 我们先看看聊天界面: ----聊天界面由三个frame组成,其中chat帧是聊天内容显示部分,talk帧是用户输入部分,包括内容输入、动作、过滤以及管理功能都在这一帧输入,names是在线名单显示部分,这一部分是定时刷新的。 ---- 让我们从浏览器的角度来看看进入聊天室的过程。 ---- 1.首先浏览器请求页面: ---- 此时产生了一个连接到服务器聊天端口的联接,并发送了一行数据: ----2.服务器生成一个session ID,验证密码以后,发回: ----然后服务器关闭联接。 ----3.浏览器收到以上文件后,将会依次打开三个联接(其中的$sid和$encrypt_pass是变量):----这三个联接中的第一个联接chat在整个聊天过程中都是保持联接的,这样从浏览器角度来看,就是一个始终下载不完的大页面,显示效果上就是聊天内容不是靠刷新来更新,而是不断地向上滚动。通过察看代码可以看到,然后就是不断增加的聊天内容. ---- 另外两个联接在页面发送完毕以后,就关闭了。 ---- 这样一次登录聊天室实际上有四次联接,但登录完成以后,只有chat帧的是保持联接的,用于接收来自服务器的聊天信息,这是聊天室的关键所在。 ----在服务器端储存了所有参加聊天的客户的chat,当有人发言时,服务器就向所有chat发送聊天内容。 ---- Talk与names帧的html实际上和普通的form是一样的。 ---- 4.在用户登录以后,服务器端保存了一张包括用户信息的表格: ---- 在perl实现中,我们使用哈希结构储存信息,以session ID 作为key索引。这样的存储结构便于存取数据,回收空间。每个客户信息是一个数组: [name,passwd,privilige,filter,login_time,color]:储存chat帧联接name:用户名passwd:密码privilige:权限filter:某个用户的过滤列表的引用(reference)login_time:记录登录时间,以便以后清除一些超时联接color:用户聊天颜色 ----以上用户数据大部分是在login阶段,用户通过密码验证以后填入的。只有chat要等到chat帧显示以后才得到。如果超过一定时间,还是没有填入,说明浏览器取得主框架以后连接中断了,这时候就需要删除该用户数据。

聊天室程序

目录 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为基础。网络聊天室刚开始的时候是以文本聊天为主,后来出现了语音聊天,到了今天,视频、语音、文字都很好的融入到了聊天工具当中。网络聊天之所以不同于现实聊天,是因为网络聊天是在虚拟的环境中完成的,从某种意义上讲,网络聊天是现实聊天的延伸。虚拟的网络聊天客服了现实聊天中的空间限制,是的聊天的空间大大的扩展了。网络聊天因其技术的发展实现了空间的无限扩展,形成了只要有互联网,不同地方的人们就可以聊天的状况,使得现实生活的交往范围大大扩展了。随着互联网技术的不断发

java实现聊天室功能(包含全部代码-有界面)

服务器端代码: import .*; import .*; import .*; import .*; public class Server { private static final int PORT=6666; G_Menu gm=new G_Menu(); private ServerSocket server; public ArrayList list; public static String user; public static ArrayList list1=new ArrayList();...."); while(true) { Socket client=();etServer(); } class Chat implements Runnable { Socket socket; private BufferedReader br; private String msg; private String mssg=""; public Chat(Socket socket) { try{ =socket; }catch(Exception ex){ (); } } public void run() { try{ br=new BufferedReader(new InputStreamReader())); while((msg=())!=null) { if("1008611"))plit(":");quals()+"("+()+")"))etOutputStream());quals ()))etOutputStream());quals(si[0]))lose();; import .*; import .*;

聊天室程序设计报告

实验5 掌握简单的网络通讯技术 实验6 掌握基于典型协议的的网络通讯技术 一实验目的 1.熟悉Socket的通讯机制,了解网络程序的设计方法。 2. 熟悉典型协议的通讯机制,掌握基于它们的网络系统设计方法。如TCP、UDP。 二实验环境 1.Windows7 2.Visual C++ 6.0 三实验程序设计 1.实验原理 1.C/S模式 C/S模式是指一个服务器同时为多个客户端服务。并发性是C/S模式的的基础,正是由于并发性的支持,多个客户端能够获得同一种服务,而不必等待服务器完成对上一个请求的处理。 在C/S模式中,当请求到达服务器时,服务器将它交给一个控制线程,它能与已有的线程并发的执行。 在设计并发服务器时,一般服务器代码由两部分组成,第一部分代码负责监听并接收客户端的请求,还负责为客户端请求创建新的服务线程;另一部分代码负责处理单个客户机请求,如与客户机交换数据,提供具体服务。 下图所示为服务器创建多个线程来为多个客户机服务。 2.基于TCP的socket通信 服务器与客户端是通过套接字来进行通信的。 在基于TCP的网络通信程序中,首先服务器端通过socket()函数创建套接字,然后通过bind()函数来命名套接字,调用listen()函数开启服务器端的监听。接着执行accept()函数来接收客户的连接,服务器阻塞等待客户连接请求,直到有客户请求连接。 客户端创建套接字,接着通过connect()函数请求连接服务器,连接成功后,就可以与服务器进行通信了。 服务器与客户机通过send()各recv()调用来进行信息的发送和接收。只有当有信息可接收时,recv()才返回,否则将阻塞。

java实现聊天室功能(包含全部代码,有界面)

服务器端代码: import https://www.doczj.com/doc/ee8863223.html,.*; import java.io.*; import java.util.*; import java.util.concurrent.*; import javax.swing.*; public class Server { private static final int PORT=6666; G_Menu gm=new G_Menu(); private ServerSocket server; public ArrayList list; public static String user; public static ArrayList list1=new ArrayList();//定义用户集合public User uu; public Server(String user) { https://www.doczj.com/doc/ee8863223.html,er=user; } public void getServer() { list =new ArrayList(); try{ server=new ServerSocket(PORT); System.out.println("服务器启动,开始监听......"); while(true) { Socket client=server.accept();//接收客户端线程 PrintWriter writer = new PrintWriter(client.getOutputStream()); list.add(writer); Thread t = new Thread(new Chat(client)); t.start(); } }catch(Exception ex){ ex.printStackTrace(); } } public static void main(String[] args) { new Server(user).getServer(); } class Chat implements Runnable { Socket socket;

聊天室代码

/**建数据库*/ if EXISTS(select*from sysdatabases where name='ChatRoom') drop database ChatRoom create database ChatRoom on primary( name='ChatRoom_data', filename='F:\JAVA\JAVA高级\聊天室\Data\ChatRoom_data.mdf', size= 5mb, maxsize= 100mb, filegrowth= 15% ) log on ( name='ChatRoom_log', filename='F:\JAVA\JAVA高级\聊天室\Data\ChatRoom_data.ldf', size= 2mb, filegrowth= 1mb ) go use ChatRoom GO /**建表*/ drop table chatMsg create table chatMsg( msg_id int identity (1,1), client_IP varchar(20), client_msg varchar(500) ) /**创建存储过程*/ if exists(select*from sysobjects where name='p_chatMsg_Add') drop proc p_chatMsg_Add go create proc p_chatMsg_Add @sIP varchar(20), @sMsg varchar(500) as

begin insert into chatMsg(client_IP,client_msg)values (@sIP,@sMsg) end select*from chatMsg package https://www.doczj.com/doc/ee8863223.html,.ChatRoomServer; import java.util.ArrayList; public class Broadcast implements Runnable { ArrayList clientList; ArrayList clientOtherList; @Override public void run() { // 广播 while (true) { try { checkCommIsUnline(); //检查是否下线 broadcast(); //调用广播方法 Thread.sleep(200); } catch (Exception e) { // e.printStackTrace(); } } } /** * 检查是否下线 */ public void checkCommIsUnline(){ for(Commiuncation comm:clientList){ //遍历clientList集合 if(comm.bStop){ clientList.remove(comm); //移除客户端通信对象 clientOtherList.remove(comm); continue; } } } //客户端消息集合,获取每个人的消息 public Broadcast(ArrayList clientList) { this.clientList = clientList; this.clientOtherList = clientList;

JAVA聊天室程序 需求分析报告

网络聊天室程序-需求分析报告 班级 :通信工程01班 小组成员:25黄浩(组长)、 10何昶卫、 05徐志庆、 26卢翱、 24罗泽思、

目录 1、引言--------------------------------------------------------------------------------------------------- 1 1.1编写目的----------------------------------------------------------------------------------------- 1 1.2项目背景----------------------------------------------------------------------------------------- 1 1.3预备知识----------------------------------------------------------------------------------------- 1 1.4参考资料----------------------------------------------------------------------------------------- 2 2、项目简介---------------------------------------------------------------------------------------------2 2.1项目要求----------------------------------------------------------------------------------------- 2 2.2整体思路----------------------------------------------------------------------------------------- 3 2.3功能需求分析----------------------------------------------------------------------------------- 3 3、系统分析与设计-----------------------------------------------------------------------------------4 3.1设计思路------------------------------------------------------------------------------------------4 3.2开发环境及工具------------------------------------------------------------------------------- 4 3.3服务器结构-------------------------------------------------------------------------------------- 4 3.4客户端结构-------------------------------------------------------------------------------------- 5 3.5功能实现细节----------------------------------------------------------------------------------- 5 3.5.1客户端运行细节-------------------------------------------------------------------------- 6 3.5.2服务器端运行细节---------------------------------------------------------------------- 7 4、用户注册、登录流程以及系统界面---------------------------------------------------------8 4.1用户注册过程-----------------------------------------------------------------------------------8 4.2用户登录过程-----------------------------------------------------------------------------------8 4.3服务器界面-------------------------------------------------------------------------------------- 9 4.4登录界面----------------------------------------------------------------------------------------- 9 4.5聊天室界面-----------------------------------------------------------------------------------------------10

聊天室代码(C#)

C#聊天室代码客户端代码: using System; using System.Collections.Generic; using https://www.doczj.com/doc/ee8863223.html,ponentModel; using System.Data; using System.Drawing; using System.Text; using https://www.doczj.com/doc/ee8863223.html,; using https://www.doczj.com/doc/ee8863223.html,.Sockets; using System.Windows.Forms; namespace EasyChat { public partial class login_frm : Form { ///

/// IP地址 /// private IPAddress _ipAddr; #region登录窗体构造函数 /// ///构造函数,自动生成 /// public login_frm() { InitializeComponent(); } #endregion #region登录窗体的私有方法 /// ///验证登录信息 /// ///验证结果 private bool ValidateInfo() { if (user_tb.Text.Trim() == string.Empty) {

MessageBox.Show("请填写用户名!", "提示", MessageBoxButtons.OK, https://www.doczj.com/doc/ee8863223.html,rmation); return false; } if (!IPAddress.TryParse(svrip_tb.Text, out _ipAddr)) { MessageBox.Show("IP地址不合法!", "提示", MessageBoxButtons.OK, https://www.doczj.com/doc/ee8863223.html,rmation); return false; } int _port; if (!int.TryParse(svrport_tb.Text, out _port)) { MessageBox.Show("端口号不合法!", "提示", MessageBoxButtons.OK, https://www.doczj.com/doc/ee8863223.html,rmation); return false; } else { if (_port < 1024 || _port > 65535) { MessageBox.Show("端口号不合法!", "提示", MessageBoxButtons.OK, https://www.doczj.com/doc/ee8863223.html,rmation); return false; } } return true; } ///

///取消,关闭窗体 /// /// /// private void cancel_btn_Click(object sender, EventArgs e)

C语言聊天室代码服务端

C语言聊天室代码(服务端) /* server.c */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include<Winsock2.h> #include<process.h> #pragma comment(lib,"ws2_32.lib") #include<windows.h> #define REG 1 //表示注册 #define LOGIN 2 //表示登陆 #define TALK_PRIVATE 3 //表示私聊 #define TALK_PUBLIC 4 //表示群聊 #define LIST 11 //表示显示所有在线不隐身用户 #define EXIT 12 //退出客户端 struct user { char username[50]; char password[50]; int cmd; char target_user[20]; char content[50]; }; struct user user; char *file_name(char *p,struct user user) //生成登陆名.txt文件函数 { int i = 0; int username_len; username_len = strlen(https://www.doczj.com/doc/ee8863223.html,ername); strcpy(p,https://www.doczj.com/doc/ee8863223.html,ername); strcat(p,".txt"); return p;

相关主题
文本预览
相关文档 最新文档