随笔-6  评论-19  文章-0  trackbacks-0

实验二:聊天室的开发

实验目的:

  • 学习Visual C#.Net Socket类的使用
  • 学习基本UI控件的使用
  • 学习多线程的开发
  • 学习聊天室的原理

实验内容:开发一套聊天室软件。根据已经完成的服务器端和通信信令,开发客户端:

  • 能够设置服务器信息,包括服务器地址和服务端口;
  • 能够设定用户在聊天室的昵称;
  • 能够显示聊天室在线人员列表;
  • 用户可以对所有人聊天,也可以对具体某一个人聊天。两人之间还可以进行私聊;
  • 滚动显示聊天信息;
  • 当有新成员进入聊天室,或者有成员退出聊天室时,会显示提示信息。

具体实验指导,请点击:网络编程实验指导.doc
点击下载实验报告模板:网络编程实验二.doc
点击下载服务器端程序:Server.rar

参考代码:

// 接收线程的处理函数
private   void  rec()
{
    
byte [] buff  =   new   byte [buffsize];
    
while  (sock.Connected)
    
{
        
// 从网络上接收数据,进而分析数据,根据不同的数据进行不同的处理
        
// 首先要判断接收到的数据是普通聊天信息还是信令
        
// 如果是普通聊天信息,接着要判断该聊天信息是否是私了
        
// 如果是信令,则根据不同的信令来做不同的处理。
        
        
// rs表示接受到的字节数
         int  rs  =  _____________;
        
if  (rs > 0 )
        
{
            
// 将收到的字节数组转化为字符串
             string  msg  =  Encoding.BigEndianUnicode.GetString(buff);
            msg 
=  msg.Substring( 0 , rs / 2 );

            
// 提取msg的第一个字符
            
// 该字符用于判断接受到的数据是普通聊天信息还是信令
             string  msgtype  =  msg.Substring( 0 , 1 );
            
// 将msg的第一个字符丢弃
            msg  =  msg.Substring( 1 );
            
// 如果接收到的数据是普通聊天信息
             if  (msgtype == " * " )
            
{
                
// 这里判断是否是聊天信息
                
// 并将聊天信息显示在聊天信息框中
                
//
                
// 请填写相关代码
                
//
            }

            
// 如果接收到的数据是信令
             else   if  (msgtype == " @ " )
            
{
                
// 从msg的前两个字符获取信令的类别
                
// 具体信令类别请参考实验指导
                 string  cmd  =  msg.Substring( 0 , 2 );

                
// 如果是增加昵称的信令:
                
// 新用户进入聊天室以后,
                
// 服务器需要把所有已经在线的用户发送给新的用户,
                
// 此时的信令为:@AN 0 nickname;
                
// 新用户进入聊天室以后,
                
// 服务器要通知所有在线用户有新用户进入聊天室,
                
// 信令为:@AN 1 nickname
                 if  (cmd  ==   " AN " )
                
{
                    
// 从第五个字符开始到信令结束部分,是昵称字段
                     string  nick  =  msg.Substring( 5 );
                    
// 从第三个字符开始的后面一个字符,是ANTYPE字段,ANTYPE=0或者1
                     string  antype  =  msg.Substring( 3 1 );

                    
// 将昵称加入到用户列表和聊天对象列表
                    _____________________;
                    _____________________;

                    
// 如果是新用户进入聊天室,
                    
// 需要在聊天信息框中显示有新用户的到来。
                     if  (antype == " 1 " )
                    
{
                        
// 这里填写在聊天信息框中显示有新用户的到来的代码
                    }

                }


                
// 有用户要退出聊天室时,
                
// 服务器发送该信令给其他客户端,
                
// 将离开的用户的离开信息通知给其余在线用户。
                 if  (cmd  ==   " DN " )
                
{
                    
// 这里填写在聊天信息框中显示用户的离开信息的代码
                }

                
// 如果是出错信息,则从弹出对话框中显示该错误信息
                
// 弹出对话框使用MessageBox.Show方法
                 if  (cmd  ==   " ER " )
                
{
                    
// 这里填写显示出错信息的代码
                }

            }
                    
        }

    }

}


// 发送消息的事件处理
private   void  btnSend_Click( object  sender, System.EventArgs e)
{
    
// 发送消息的事件。
    
// 这里需要判断是否私聊
    
// 普通聊天信息的格式为:*(0/1)nickname_from nickname_to msg
    
// 具体参考实验指导

    Byte[] recMsg 
=   new  Byte[buffsize];  // 用于容纳发送数据的数组
     string  Msg;  // 普通聊天信息的字符串
     if  (chkSecret.Checked)
    
{
        Msg 
=  _____________________________________________________________;
    }

    
else
        Msg 
=  _____________________________________________________________;

    recMsg 
=  System.Text.Encoding.BigEndianUnicode.GetBytes(Msg.ToCharArray());

    ________________________________________;
// 发送数据
}


// 主界面初始化
private   void  ClientForm_Load( object  sender, System.EventArgs e)
{
    
// 主界面初始化,需要将聊天信息框、
    
// 用户列表框和聊天对象下拉框的信息清空。
    
// 并将“所有人”这个聊天对象加入到聊天对象下拉框中
    
// 并将其选中。

    
// 这里开始填写初始化代码
    
//
    
// 请填写相关代码
    
//
    
    
// 定义接收线程
    recThread  =   new  Thread( new  ThreadStart(rec));
}


// 连接服务器
private   void  btnConnect_Click( object  sender, System.EventArgs e)
{
    
// 连接服务器
    
// 请进行必要的判断,比如昵称是否为空等
    
// 这里开始填写连接服务器的代码:
    
//
    
// 请填写相关代码
    
//

    
if  (sock.Connected)
    
{
        
// 登录以后把自己的昵称发送给服务器
        
// 发送昵称的信令为:@NN Nickname
        Byte[] recMsg  =   new  Byte[buffsize];  // 容纳信令的字节数组
         string  cmd;  // 信令字符串
        cmd  =  ________________________________________________________;
        recMsg 
=  System.Text.Encoding.BigEndianUnicode.GetBytes(cmd.ToCharArray());
        ________________________________________________;
// 发送信令
        ________________________; // 将昵称输入框的Enable属性改为False,禁止用户修改昵称
        
        
// 初始化接收线程,并发起该线程
        Thread recThread  =   new  Thread( new  ThreadStart(rec));
        recThread.Start();            
    }

}


// 断开连接代码
private   void  tbnDisconnect_Click( object  sender, System.EventArgs e)
{
    
// 断开连接代码
     if  (sock.Connected)
    
{
        Byte[] recMsg 
=   new  Byte[buffsize];  // 容纳信令的字节数组

        
string  cmd; // 信令字符串
        cmd  =  ________________________________________________________;

        recMsg 
=  System.Text.Encoding.BigEndianUnicode.GetBytes(cmd.ToCharArray());
        ________________________________________________;
// 发送信令

        
// 开始关闭套接字
        
//
        
// 请填写相关代码
        
//

        
// 清空各个用户列表和聊天对象列表
        
//
        
// 请填写相关代码
        
//

        
// 将昵称输入框的Enable属性改为True,以便下一次连接
        _____________________________;
    }
        
}


posted on 2006-11-06 16:47 阿土仔的世界 阅读(2283) 评论(8)  编辑 收藏 引用 网摘 所属分类: 网络编程

评论:
# re: [实验指导]C#网络编程实验二:聊天室的开发 2006-11-18 17:40 | 葉琦
老師,妳這個服務器耑程序的耑口號是多少?  回复  更多评论
  
# re: [实验指导]C#网络编程实验二:聊天室的开发 2006-11-18 17:47 | 阿土仔的世界
@葉琦
6688  回复  更多评论
  
# re: [实验指导]C#网络编程实验二:聊天室的开发 2006-11-25 14:06 | lucy
@阿土仔的世界
请求将客户端,服务器端,源程序发到邮箱:hr000539@163.com,谢谢!  回复  更多评论
  
# re: [实验指导]C#网络编程实验二:聊天室的开发 2007-07-29 11:45 | 琥珀
代码好长呀!  回复  更多评论
  
# re: [实验指导]C#网络编程实验二:聊天室的开发 2007-07-29 11:47 | 翡翠
C#的聊天室,没有JAVA的好!
http://www.hoopower.com  回复  更多评论
  
# re: [实验指导]C#网络编程实验二:聊天室的开发 2007-08-20 23:49 | 丁均泉
同学,能不能把网络编程实验指导.doc,网络编程实验二.doc和Server.rar给我发一下,我这下不了!
我EMAIL:djqxidian@126.com
先感谢了,我有个项目能用到这方面的,希望能收到的信哦!

  回复  更多评论
  
# re: [实验指导]C#网络编程实验二:聊天室的开发 2007-08-21 10:52 | 丁均泉
老师:不好意思,把你当学生了,还望海涵。
我是大四学生,因初学C#,而又需要一个C#聊天室程序,麻烦你把资料发给我,非常感谢你!  回复  更多评论
  
# re: [实验指导]C#网络编程实验二:聊天室的开发 2008-03-25 20:47 | kwl
能不能把网络编程实验指导.doc,网络编程实验二.doc和Server.rar给我发一下,我这下不了!我是大四学生,因初学C#,而又需要一个C#聊天室程序,麻烦你把资料发给我,非常感谢你!非常之急,毕业设计论文的主题!!
我的E-mail:kwlstudent@sina.com
  回复  更多评论
  

只有注册用户登录后才能发表评论。