c#基于tcp协议网络聊天程序

上传人:第*** 文档编号:33575724 上传时间:2018-02-15 格式:DOCX 页数:37 大小:559.36KB
返回 下载 相关 举报
c#基于tcp协议网络聊天程序_第1页
第1页 / 共37页
c#基于tcp协议网络聊天程序_第2页
第2页 / 共37页
c#基于tcp协议网络聊天程序_第3页
第3页 / 共37页
c#基于tcp协议网络聊天程序_第4页
第4页 / 共37页
c#基于tcp协议网络聊天程序_第5页
第5页 / 共37页
点击查看更多>>
资源描述

《c#基于tcp协议网络聊天程序》由会员分享,可在线阅读,更多相关《c#基于tcp协议网络聊天程序(37页珍藏版)》请在金锄头文库上搜索。

1、郑州轻工业学院网 络 高 级 编 程实 训 报 告实训名称: 基于 TCP 协议的网络聊天程序 姓 名 学 号 班 级 指导教师 实训地点 日 期 l实训一l.l实训目的:通过开发一款网络聊天程序, 熟练掌握多线程编程技术和TCP 应用编程技术。通过本实训, 达到如下目标:1)理解委托的概念, 掌握线程之间通过委托与控件交互的方法。2)理解异常处理的机制,掌握异常处理语句的用法。3)理解线程的概念, 掌握多线程编程的一般方法。4)掌握基于TCP的应用编程技术 。l.2实训题目: 使用c#编程语言, 开发一款网络聊天程序, 玩家通过客户端登陆远程的服务器, 登陆成功后可以与其他在线的玩家通信 ,

2、 如下图所示。客户端 服务器端1.3程序基本功能描述如下:1) 当服务器开启服务后, 允许任何一个玩家通过客户端登陆服务器。2) 每当有玩家登录或退出时, 每一个在线的玩家都会刷新玩家列表。3) 当玩家登陆成功后, 可以通过服务器端与任何一个在线的玩家聊天1.4 需求分析:网络聊天程序的系统结构图如下所示 。用户接 口 定义数据字典如下:1)用户(User):在网络聊天程序中,用户是已登陆的玩家。用户具有玩家的用户名、 客户端与服务器之间建立的 Tc连接等属性 。 在程序中, 用户负责向服务器发送和接收数据。2)用户集合(UserList):在网络聊天程序中,用户集合是所有已经登陆服务器的玩家

3、的列表 。 用户集合包含所有已登陆的玩家的用户名和 TcP连接等信息。在程序中,用户集合负责添加、删除用户, 以及向客户端发送和接收数据。1.5 设计说明:1.5.1 界面设计:服务器端:玩家 用户 用户集合 管理员通信接口 用户接口客户端:1.5.2 功能设计:根据需求分析可知, 管理员可以启动停止服务器; 玩家可以登陆服务器; 登录后的玩家可以与其它在线的玩家聊天; 在线玩家关闭客户端即退出登录。客户端发送给服务器端的命令有如下3种: 1)1ogin,用户名:玩家请求登陆服务器。玩家点击“登陆按钮后, 就会发送1ogin命令, 其中的用户名就是请求登陆玩家的用户名 。2)1ogout,用户

4、名: 玩家请求退出服务器。 玩家关闭客户端的主窗体后, 就会发送1ogout命令, 其中的用户名就是请求退出玩家的用户名 。3)talk,用户名1 ,用户名2,信息: 玩家发出聊天信息 。 玩家点击 “发送按钮后,就会发送talk命令,其中的用户名1是发出信息的玩家, 用户名2是接收信息的玩家 。服务器端发送给客户端的命令有如下4种:1)1ogin,用户名:服务器接受到1ogin命令后,检査用户集合,如果没有重名的在线用户,则给所有用户发送1ogin命令,通知玩家更新用户列表。2)sorry:服务器接受到1ogin命令后,检査用户集合,如果发现有重名的在线用户, 就会向新登陆的用户发送sorr

5、y命令拒绝登陆。3)1ogout,用户名: 服务器接收到1ogout命令后, 向所有在线用户发送1ogout命令, 通知其他玩家更新用户列表 。4)talk,用户名1 ,用户名2,信息: 服务器接收到talk命令后, 先给用户2发送talk命令; 发送成功后, 再给用户1发送talk命令, 通知用户1 , 聊天信息发送成功。1.6 源代码:1)服务器端代码如下:User类:using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;u

6、sing System.Net.NetworkInformation;using System.Net;using System.Net.Sockets;using System.Threading;using System.IO;namespace _541307110117TalkServerpublic class User public string userName;public TcpClient client;public BinaryReader br;public BinaryWriter bw;public User(TcpClient client)this.client

7、 = client;NetworkStream ns = client.GetStream();br = new BinaryReader(ns);bw = new BinaryWriter(ns);public void Close()br.Close();bw.Close();client.Close();public void Send(string message)try bw.Write(message);bw.Flush();catch (Exception ex)throw ex;public string Receive()tryreturn br.ReadString();c

8、atch (Exception ex)throw ex; UserList类:using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace _541307110117TalkServerpublic class UserListpublic List list;public UserList()list = new List();public void AddUser(User user)list.Add(user)

9、;public void RemoveUser(User user) user.Close();list.Remove(user );public void RemoveAllUsers()for (int i = list.Count - 1; i = 0; i-)RemoveUser(listi);/user是登录或退出的用户public void SendToAllUsers(User user, string message)string splitStrings = message.Split(,);if (splitStrings0 = login)foreach (User u

10、in list)u.Send(message);if (u.userName != splitStrings1) user.Send(login, + u.userName);elseforeach (User u in list)if (u.userName != splitStrings1)u.Send(message);Mainwondow界面代码:using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using Syst

11、em.Windows;using System.Windows.Controls;using System.Windows.Data;using System.Windows.Documents;using System.Windows.Input;using System.Windows.Media;using System.Windows.Media.Imaging;using System.Windows.Navigation;using System.Windows.Shapes;using System.Net.Sockets;using System.Net;using Syste

12、m.Threading;namespace _TalkServer/ / MainWindow.xaml 的交互逻辑/ public partial class MainWindow : Windowpublic MainWindow()InitializeComponent();listener = new TcpListener(IPAddress.Parse(127.0.0.1),port);userList = new UserList();isStopped = true;public TcpListener listener;public UserList userList;pub

13、lic const int port = 8888;public bool isStopped;private void buttonStart_Click(object sender, RoutedEventArgs e)try listener.Start();isStopped = false;Task.Run() = ListenConnect();buttonStart.IsEnabled = false;buttonStop.IsEnabled = true;catchMessageBox.Show(port+端口已占用!);public void ListenConnect()w

14、hile (!isStopped)TcpClient client;tryclient = listener.AcceptTcpClient();catch break;User newUser = new User(client);userList.AddUser(newUser);Task.Run()=Receive(newUser);public void Receive(User user)while (!isStopped)string message = null;trymessage = user.Receive();catch userList.SendToAllUsers(u

15、ser,logout,+user.userName);userList.RemoveUser(user);break; string splitStrings = message.Split(,);switch (splitStrings0) case login:bool isLeagle = true;string name = splitStrings1;foreach (User u in userList.list)if (u.userName = name)isLeagle = false;break; if (isLeagle)user.userName = name; userList.SendToAllU

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 解决方案

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号