1+1网络聊天软件 -客户端.doc_第1页
1+1网络聊天软件 -客户端.doc_第2页
1+1网络聊天软件 -客户端.doc_第3页
1+1网络聊天软件 -客户端.doc_第4页
1+1网络聊天软件 -客户端.doc_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

数学与计算机学院 1+1网络聊天软件 实验报告年级 09级 学号 2009482224 姓名 金鑫 成绩 专业 网络工程 实验地点 B3115 指导教师 常卓 实验项目 1+1网络聊天软件 -客户端 实验日期 12年5月10日 1+1模式网上聊天客户端一 实验目的1.1掌握和了解聊天室中的网络通信原理 1.2 加强对网络编程的巩固二 实验原理通过C#,实现网络聊天的功能,采用Windows Socket编程,服务器与客户端采用了TCP/IP连接方式,在设计聊天方案时,实行将所有信息发往服务器端,再由服务器进行分别处理的思路,服务器端是所有信息的中心。由于服务器端要保存用户信息,我们利用数据库来实现这一功能,因此首先需要建立用户信息数据库。在客户端保存聊天纪录和用户号码这一功能的实现中,采用了文件系统设计。在信息到来及好友上线时,通过闪动托盘图标和播放不同的音乐进行提示。建立消息链表来保存用户接收的各种消息。服务器端应实现的功能1) 登陆信息:检查登陆信息是否正确,并向客户端返回登陆信息,如信息正确。就将在线用户发给该用户,并将该用户的状态发给各在线用户。同时在服务器端显示出来。2) 聊天信息:转发给消息指定的用户。3) 申请信息:自动分配8位用户号码,并保存该用户,同时将信息返回给客户端。用户下线:将此用户下线消息发给各客户端,并改写用户在服务器端的状态 三 实验要求3.1具体要求实现一个基于C/S模式的多功能网上聊天室。网上聊天服务器除了一般的网上聊天功能外,还可以管理所有参与聊天者,比如断开连接等动作;客户端中聊天者可以选择谈话对象,使用预设动作,还可以设置字体颜色,或者对某人说“悄悄话”,对其他聊天者进行信息过滤等。服务器与客户端共同组成一个网络聊天室。 四 实验步骤、结果截图private void login_btn_Click(object sender, EventArgs e) - 登陆到服务器 private void svrip_tb_TextChanged(object sender,EventArgs e)设置要连接的服务器的地址端口private void chatrcd_rtb_TextChanged(object sender, EventArgs e)- 显示好友发送的信息private void send_btn_Click(object sender, EventArgs e) - 给好友发送信息private void user_tb_TextChanged(object sender, EventArgs e) - 申请新的用户private void chatrcd_rtb_TextChanged(object sender, EventArgs e) - 显示服务器消息private void msg_tb_TextChanged(object sender, EventArgs e) - 显示消息输入文本private void nudge_pb_Click(object sender, EventArgs e)-发送窗口抖动private void broadcast_rb_CheckedChanged(object sender, EventArgs e)-聊天模式的变更private void hide_cb_CheckedChanged(object sender, EventArgs e)-最小化到托盘a)登陆private void login_btn_Click(object sender, EventArgs e) /验证数据合法性 if (!ValidateInfo() return; int port = int.Parse(svrport_tb.Text); /向服务器发出连接请求 TCPConnection conn = new TCPConnection(_ipAddr, port); TcpClient _tcpc = conn.Connect(); if (_tcpc = null) MessageBox.Show(无法连接到服务器,请重试!, 错误, MessageBoxButtons.OK, MessageBoxIcon.Exclamation); else NetworkStream netstream = _tcpc.GetStream(); /向服务器发送用户名以确认身份 netstream.Write(Encoding.Unicode.GetBytes(user_tb.Text), 0, Encoding.Unicode.GetBytes(user_tb.Text).Length); /得到登录结果 byte buffer = new byte50; netstream.Read(buffer, 0, buffer.Length); string connResult = Encoding.Unicode.GetString(buffer).TrimEnd(0); if (connResult.Equals(cmd:Failed) MessageBox.Show(您的用户名已经被使用,请尝试其他用户名!, 提示, MessageBoxButtons.OK, MessageBoxIcon.Information); return; else string svrskt = svrip_tb.Text + : + svrport_tb.Text; chat_frm chatFrm = new chat_frm(user_tb.Text, netstream, svrskt); chatFrm.Owner = this; this.Hide(); chatFrm.Show(); b)发送消息private void send_btn_Click(object sender, EventArgs e) string localTxt = null; string sendTxt = null; string msg = msg_tb.Text.Trim(); if (msg = string.Empty) MessageBox.Show(不能发送空消息, 提示, MessageBoxButtons.OK, MessageBoxIcon.Information); return; /如果是聊天室模式则向服务器发送广播请求 if (broadcast_rb.Checked) localTxt = string.Format(广播您在 0 对所有人说:rn1rnrn, DateTime.Now, msg); sendTxt = string.Format(广播0 在 1 对所有人说:rn2rnrn, _username, DateTime.Now, msg); /发送广播请求 _nws.Write(new byte 0, 5 , 0, 2); else string _receiver = online_cb.Text; if (_receiver = string.Empty) MessageBox.Show(请选择一个接收者!n如果没有接受者可选,表明当前只有您一个人在线t, 发送消息, MessageBoxButtons.OK, MessageBoxIcon.Information); return; localTxt = string.Format(私聊您在 0 对 1 说:rn2rnrn, DateTime.Now, _receiver, msg); sendTxt = string.Format(私聊0 在 1 对您说:rn2rnrn, _username, DateTime.Now, msg); /发送接受者用户名 _nws.Write(Encoding.Unicode.GetBytes(_receiver), 0, Encoding.Unicode.GetBytes(_receiver).Length); _nws.Write(Encoding.Unicode.GetBytes(sendTxt), 0, Encoding.Unicode.GetBytes(sendTxt).Length); chatrcd_rtb.AppendText(localTxt); msg_tb.Clear(); / / 有新消息来时闪烁任务栏并且保持聊天记录内容滚动到最底端,QQ就是这么玩滴 / / / DllImport(user32.dll) public static extern bool FlashWindow(IntPtr hWnd, bool bInvert); private void chatrcd_rtb_TextChanged(object sender, EventArgs e) chatrcd_rtb.ScrollToCaret(); if (this.WindowState = FormWindowState.Minimized) FlashWindow(this.Handle, true); / / 当窗口恢复后取消任务栏的闪烁效果 / 当窗口最小化时判断是否要隐藏到系统托盘 / / / private void chat_frm_SizeChanged(object sender, EventArgs e) switch (this.WindowState) case FormWindowState.Normal: FlashWindow(this.Handle, false); break; case FormWindowState.Minimized: if (_hideFlag) notifyIcon1.Visible = true; this.Visible = false; break; default: break; / / 在线列表下拉框显示之前向服务器发送请求在线列表的命令 / / / private void online_cb_DropDown(object sender, EventArgs e) _nws.Write(new byte 0, 2 , 0, 2); / / 聊天模式改变 / / / private void broadcast_rb_CheckedChanged(object sender, EventArgs e) if (private_rb.Checked) online_cb.Enabled = true; else online_cb.Enabled = false; / / 设置最小化到系统托盘的标记值 / / / private void hide_cb_CheckedChanged(object sender, EventArgs e) _hideFlag = hide_cb.Checked; / / 产生闪屏振动效果 / private void Nudge() if (notifyIcon1.Visible = true) return; if (this.WindowState = FormWindowState.Minimized) this.WindowState = FormWindowState.Normal; int i = 0; Point _old = this.Location; Point _new1 = new Point(_old.X + 2, _old.Y + 2); Point _new2 = new Point(_old.X - 2, _old.Y - 2); _sp2.Play(); while (i 4) this.Location = _new1; Thread.Sleep(60); this.Location = _new2; Thread.Sleep(60); i+; this.Location = _old; c)发送抖动private void nudge_pb_Click(object sender, EventArgs e) string displayTxt = null; if (private_rb.Checked & online_cb.Text = string.Empty) MessageBox.Show(非聊天室模式下必须先选择一个接收者!, 发送闪屏振动, MessageBoxButtons.OK, MessageBoxIcon.Information); return; if (private_rb.Checked) _nws.Write(new byte 0, 4 , 0, 2); string _receiver = online_cb.Text; _nws.Write(Encoding.Unicode.GetBytes(_receiver), 0, Encoding.Unicode.GetBytes(_receiver).Length); displayTxt = string.Format(系统提示您向 0 发送了一个闪屏振动。rnrn, _receiver); else _nws.Write(new byte 0, 3 , 0, 2); displayTxt = 系统提示您向所有人发送了一个闪屏振动。rnrn; chatrcd_rtb.AppendText(displayTxt); Nudge(); d)关闭,断开连结private void close_btn_Click(object sender, EventArgs e) DialogResult ret; ret = MessageB

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论