仿QQ设计程序教程ppt课件.ppt
《仿QQ设计程序教程ppt课件.ppt》由会员分享,可在线阅读,更多相关《仿QQ设计程序教程ppt课件.ppt(76页珍藏版)》请在三一文库上搜索。
1、第8章 MyQQ的设计,8.1 项目的创建,8.2 数据包的设计,8.3 主界面的设计,8.4 聊天窗口的设计,8.5 读者完成部分,知识点链接,L8.1 项目的创建,L8.3 主界面的设计,L8.5 读者完成部分,1. MyQQ的介绍 当双击所要聊天对象时弹出聊天窗口,聊天窗口如图8.2所示, 用于发送信息和显示聊天信息。,图8.1 MyQQ主界面 图8.2 聊天窗口,2所要掌握的主要知识点 (1)网络通信知识点,Socket、TcpListener、TcpClient和UdpClient类。 (2)线程知识点,Thread类。 (3)熟悉ListView控件、NotifyIcon组件的使用
2、。,8.1 项目的创建,MyQQ应用程序主要讲述网络通信和多线程,包括主界面窗体和聊天窗口窗体这两个窗体,主界面主要显示在线的人物以及选择聊天对象,聊天窗口用于发送聊天信息和接受聊天信息。此项目中同时还包括封装数据包的类DataPacket。 项目的创建步骤: 1创建项目 运行VS2008,执行【文件】【新建】【项目】命令,在弹出的“新建项目”对话框中选中“Windows窗体应用程序”模板,选择项目存放位置并输入项目名称为“MyQQ”,单击“确定”按钮完成项目的创建。 2添加窗体 打开“解决方案资源管理器”窗口,右击项目名“MyQQ”,依次执行快捷菜单中的“添加”“新建项”命令,在弹出的“添加
3、新项”对话框中选中“Windows窗体”模板,使用默认名称“Form1”,单击“添加”按钮完成窗体的添加。按照同样的方法再添加一个窗体,使用默认命名。其中“Form1”为主界面窗体,“Form2”为聊天窗口窗体。,8.1 项目的创建,3添加类DataPacket 在“解决方案资源管理器”窗口中,右击项目名“MyQQ”,依次执行快捷菜单中的“添加”“新建项”命令,在弹出的“添加新项”对话框中选中“类”模板,命名为“DataPacket.cs”并单击“添加”按钮。 到此完成了整个项目的创建。,8.2 数据包的设计,数据包格式包括“命令号”、“发送端IP”、“用户名长度”、“用户名”、“接受端IP”
4、和“内容”6个部分。 命令号是说明此数据包用于所要执行的任务,发送端IP是指发送信息端的IP地址,用户名为发送端的用户名,用户名的字节数是指发送端的用户名的字节数,接受端IP是指所要发送到对方的IP地址,内容是指数据包所附带的信息。数据包的结构如图8.3所示。,图8.3 数据包结构,8.2 数据包的设计,设计步骤: 1. 添加命名空间 打开类DataPacket,因为此类中涉及网络,所以要添加如下命名空间: using System.Net; 2. 添加其他代码 代码如下。,8.3 主界面的设计,主界面窗体运行后如图8.1所示,通过ListView控件和ImageList显示在线的人物以及选择
5、聊天对象,通过StatusStrip控件显示在线人数以及包括“上线”和“下线”功能。 设计步骤: 1. 添加控件和组件 在解决方案资源管理器中打开“Form1.cs”。将Form1窗体调整到适当大小,从工具箱中拖放1个“NotifyIcon”组件、1个“ListView”和1个“ImageList”控件到此窗体中。参考图8.1所示摆放控件。,8.3 主界面的设计,2. 设置窗体和控件组件的属性 Form1的Text属性值设置为“MyQQ”,Icon设置为已经准备好的图标,MaximizeBox设置为“False”。 (1)notifyIcon1的属性设置。Icon选择已经准备好的图标,Text
6、设置为“MyQQ”。 (2)imageList1的属性设置。在其属性窗口中打开“ ”按钮图标,弹出“图像集合编辑器”窗口,分别添加一些用于显示聊天对象的图标,如图8.4所示。,图8.4 图像集合编辑器,8.3 主界面的设计,(3)listView1的属性设置。打开listView1属性窗口,FullRowSelect和View属性值分别设置为“True”和“Title”,MultiSelect设置为“False”,StateImageList属性选择为“imageList1”,Columns集合中分别添加3个“columnHeader”成员。 (4)statusStrip1的设置。分别添加一个
7、“toolStripStatusLabel”和一个“toolStripDropDownButton”。toolStripStatusLabel1的Text属性设置为“在线人数 人”,选中toolStripDropDownButton1Text,分别添加“上线”和“下线”选项,如图8.5所示,Image选择准备好的图标。,图8.5 添加上下线,8.3 主界面的设计,3. 添加事件及代码 主窗口窗体包含有“窗体加载”、“上线”、“下线”、“选择聊天对象”和“调整大小”事件。 (1)添加命名空间。因为涉及线程和网络的操作,所以添加命名空间如下: using System.Threading; usi
8、ng System.Net; using System.Net.Sockets; (2)添加字段。所添加的字段如下所示: private UdpClient UdpListen = new UdpClient(8000); private IPAddress myIP = Dns.GetHostEntry(Dns.GetHostName().AddressList0; /本机器IP地址 private string myName = Environment.UserName; /本机器用户名 /*标识网络地址,初始化广播端口号*/ private IPEndPoint EndPoint = n
9、ew IPEndPoint(IPAddress.Parse(“192.168.101.255“), 8000); private static bool MyState = false; /是否为在线状态,8.3 主界面的设计,(3)主界面中添加上线人的成员方法。通过数据包参数将此上线的人的用户名、IP地址以及图像显示在主界面中,并更新在线人数。代码如下: private void AddPerson(DataPacket dp) /添加聊天的人 ListViewItem lviUserName = new ListViewItem(); ListViewItem.ListViewSubIte
10、m lvsiComputerName = new ListViewItem.ListViewSubItem(); ListViewItem.ListViewSubItem lvsiIP = new ListViewItem.ListViewSubItem(); lvsiComputerName.Text = dp.ComputerName; lvsiIP.Text = dp.FromIP.ToString(); int imagecount = listView1.Items.Count % imageList1.Images.Count; /选择图像 lviUserName.StateIma
11、geIndex = imagecount; lviUserName.SubItems.Add(lvsiComputerName); lviUserName.SubItems.Add(lvsiIP); listView1.Items.Add(lviUserName); toolStripStatusLabel1.Text = “在线人数:“ + listView1.Items.Count + “人“;/显示聊天人数 ,8.3 主界面的设计,(4)监听指定端口的广播地址UDP包的成员方法的代码。当接受到数据包时,分析其包的命令,并执行相应的代码。代码如下所示。 (5)添加“窗体加载”事件及其代码。
12、当窗体加载时就开启监听线程,切换到Form1的设计视图,双击窗体,添加代码,代码如下所示: private void Form1_Load(object sender, EventArgs e) /*开启监听线程*/ Thread myThread = new Thread(new ThreadStart(this.ListenPort); myThread.IsBackground = true; myThread.Start(); Control.CheckForIllegalCrossThreadCalls = false;/忽略跨线程错误,这时会抛出异常 ,8.3 主界面的设计,(6)
13、添加上下线事件及其代码。当单击“上线”和“下线”时分别发送“上线”和“下线”数据包。切换到设计视图并分别双击“上线”和“下线”,添加事件代码,代码如下。,8.3 主界面的设计,(7)添加选中聊天对象事件及其代码。当双击聊天对象时弹出聊天窗口并发生聊天请求数据包。在listView1的事件窗口中双击DoubleClick,添加其事件代码,代码如下: private void listView1_DoubleClick(object sender, EventArgs e) /聊天 string strChatIP = listView1.SelectedItems0.SubItems2.Text
14、; IPAddress IPAddChatIP = IPAddress.Parse(strChatIP); Form2 form2 = new Form2(myIP, myName, IPAddChatIP); form2.Show(); /*发送聊天请求数据包*/ DataPacket comeDataPacket = new DataPacket(); comeDataPacket.CommandNo = 1; comeDataPacket.FromIP = myIP; comeDataPacket.NameLength = myName.Length; comeDataPacket.Co
15、mputerName = myName; comeDataPacket.ToIP = IPAddChatIP; comeDataPacket.Content = “聊天请求“; byte sendb = comeDataPacket.PacketToBytes(); UdpListen.Send(sendb, sendb.Length, EndPoint); /发送信息 ,8.3 主界面的设计,(8)添加关闭窗口事件及其代码。当关闭窗口退出程序时发送下线数据包。打开Form1的事件窗口,双击“FormClosed”,添加其事件代码,代码如下: private void Form1_FormCl
16、osed(object sender, FormClosedEventArgs e) /关闭窗口 下线ToolStripMenuItem_Click(null, null); /下线 (9)添加调整大小事件。当最小化主界面时,最小化到任务栏状态通知区域中。打开Form1的事件窗口,双击“Resize”,添加其事件代码,代码如下: private void Form1_Resize(object sender, EventArgs e) if (this.WindowState = FormWindowState.Minimized) this.Visible = false; /隐藏窗体 th
17、is.notifyIcon1.Visible = true; /在托盘中显示图标 ,8.3 主界面的设计,(10)添加notifyIcon1的双击事件。打开notifyIcon1的事件窗口,双击“DoubleClick”,添加其事件代码,代码如下: private void notifyIcon1_DoubleClick(object sender, EventArgs e) this.Visible = true; /显示主窗口 this.WindowState = FormWindowState.Normal; this.notifyIcon1.Visible = false; ,8.3
18、主界面的设计,4. 运行程序 按【Ctrl+F5】组合键运行程序。选择上线选项,则自己的图标、用户名和IP地址显示在主界面中。当最小化MyQQ时,进程图标显示在任务栏状态通知区域中。如图8.6所示。,图8.6 MyQQ进程图标,8.4 聊天窗口的设计,聊天窗口用于发送聊天信息给聊天对象并接受聊天对象的信息。在这里为了突出知识点和教学方便,使用传输控制协议 (TCP)只实现发送信息给自己并接受信息。运行的界面如图8.2所示。 设计步骤: 1. 添加控件 在解决方案资源管理器中打开“Form2.cs”。将Form2窗体调整到适当大小,从工具箱中拖放1个“toolStrip1”、2个“TextBox
19、”和2个“Button”控件到此窗体中。参考图8.2所示摆放控件。 2. 窗体和控件属性设置 打开Form2的属性窗口,Text属性设置为“MyQQ”,MaximizeBox、MinimizeBox和ShowIcon的属性值都设置为“False”。StartPosition属性值设置为“CenterScreen”。button1和button2的Text属性值设置为“发送”和“关闭”。toolStrip1学生可以自己设计。,8.4 聊天窗口的设计,3. 添加事件及代码 聊天窗口包含有“发送”和“关闭”事件。 (1)添加命名空间。因为涉及线程、文件系统和网络的操作,所以添加命名空间如下: usi
20、ng System.Net.Sockets; using System.Net; using System.IO; using System.Threading; (2)添加字段。所添加的字段如下所示: IPAddress myIP; /发送方的IP地址 IPAddress toIP; /接受方的IP地址 string myName; /方式方的用户名 TcpListener tcpListener; /接受方用于TCP监听 TcpClient tcpClient; /发送方用于请求与对方连接 Socket socket; Thread receThread; /发送信息线程,8.4 聊天窗口
21、的设计,(3)添加构造函数。此构造函数用于接收从主界面传过来的发送方的IP地址,发送方的用户名以及接受方的IP地址。代码如下: public Form2(IPAddress myip,string myname,IPAddress toip) InitializeComponent(); myIP = myip; toIP = toip; myName = myname; ,8.4 聊天窗口的设计,(4)添加监听端口并接受信息成员方法。监听3333端口并将接受到的信息转换为字符串类型并显示在textBox1中,代码如下: private void receiveData() tcpListen
22、er = new TcpListener(IPAddress.Any, 3333); /新建TcpListener对象 while (true) tcpListener.Start(); /开始监听端口 socket = tcpListener.AcceptSocket(); /接受连接请求 byte buffter = new byte1024; /定义缓冲区 while (socket.Receive(buffter) != 0) /接受消息 textBox1.Text += Encoding.Default.GetString(buffter); /转换为字符串并显示 socket.Cl
23、ose(); /关闭连接 tcpListener.Stop(); /停止监听 ,8.4 聊天窗口的设计,(5)添加窗体加载事件及其代码。当窗体加载时新建一个线程用于监听端口并接受消息。切换到设计视图,双击Form2,添加其事件代码,代码如下: private void Form2_Load(object sender, EventArgs e) receThread = new Thread(new ThreadStart(receiveData); /新建一个线程用于监听消息 receThread.Start(); ,8.4 聊天窗口的设计,(6)添加“发送”按钮事件及其事件代码。“发送”按
24、钮用于和对方建立连接并将信息发送给对方。双击“发送”按钮,其事件代码如下: private void button1_Click(object sender, EventArgs e) tcpClient = new TcpClient(); tcpClient.Connect(toIP, 3333); /建立连接 NetworkStream stream = tcpClient.GetStream(); /获取网络流 string strsent = myName + “(“ + myIP.ToString() + “)“ + DateTime.Now.ToString() + “rn“ +
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- QQ 设计 程序 教程 ppt 课件
链接地址:https://www.31doc.com/p-2527755.html