基于Socket聊天室(C#版).doc
《基于Socket聊天室(C#版).doc》由会员分享,可在线阅读,更多相关《基于Socket聊天室(C#版).doc(25页珍藏版)》请在咨信网上搜索。
1、一、服务器/客户端聊天室模型1.首先启动聊天室服务器,使得TcpListener开始监听端口,此时TcpListener会进入Pending状态,等待客户端连接;2.其次,当有客户端连接后,通过AccepSocket返回与客户端连接的Socket对象,然后通过读写Socket对象完成与聊天室客户端的数据传输。聊天室客户端成功启动后,首先创建一个Socket对象,然后通过这个Socket对象连接聊天室服务器,连接成功后开通Socket完成数据的接收和发送处理。二、系统功能设计本设计为一个简单的聊天室工具,设计基本的聊天功能,如聊天、列表维护等。系统主要为两大块:聊天室服务器及聊天室客户端。服务器
2、界面设计如下:客户端界面设计如下:三、聊天协议的应答A网络B主机与主机通信主要识别身份(标识设备用IP)及通信协议网络应用程序端口号接收数据注:1.IP地址是总机,端口号是分机(传输层)2.端口号为16位二进制数,范围0到65535,但实际编程只能用1024以上端口号Socket编程首先,我们了解常用网络编程协议。我们用得最多的协议是UDP和TCP,UDP是不可靠传输服务,TCP是可靠传输服务。UDP就像点对点的数据传输一样,发送者把数据打包,包上有收信者的地址和其他必要信息,至于收信者能不能收到,UDP协议并不保证。而TCP协议就像(实际他们是一个层次的网络协议)是建立在UDP的基础上,加入
3、了校验和重传等复杂的机制来保证数据可靠的传达到收信者。一个是面向连接一个无连接,各有用处,在一些数据传输率高的场合如视频会议倾向于UDP,而对一些数据安全要求高的地方如下载文件就倾向于TCP。Socket网络应用程序电话机访问通信协议聊天协议的应答:聊天状态:CLOSED和CONNECTED状态执行CONN命令后进入CONNECTED状态,执行下列命令:CONN:连接聊天室服务器JOIN:加入聊天(通知其他用户本人已经加入聊天室服务器)LIST:列出所有的用户(向客户端发送全部的登录用户名字)CHAT:发送聊天信息(公开的聊天信息)PRIV:进行私聊(三个参数:私聊信息用户;接收私聊信息用户;
4、发送信息)EXIT:客户端向服务器发送离开请求;QUIT:退出聊天,服务器向客户端发送退出命令(执行QUIT命令聊天状态变为CLOSED)四、系统实现服务器协议解析:当有客户端连接聊天室服务器后,服务器立刻为这个客户建立一个数据接收的线程(多用户程序必备)。在接收线程中,如果收到聊天命令,就对其进行解析处理,服务器可以处理五种命令:CONNLISTCHATPRIVEXIT。服务器接收到CONN命令,就向其他用户发送JOIN命令告诉有用户加入,然后把当前的全部用户信息返回给刚刚加入的用户,以便在界面上显示用户列表。当接收到EXIT命令后,就清除当前用户的信息,然后向其他用户发送QUIT命令,告诉
5、其他用户退出了,这些用户的客户端把离开的用户从用户列表中删除。聊天室客户端的协议解析:当客户端连接到服务器后,服务器立刻建立一个数据接收的独立线程。在接收线程中,如果收到了聊天命令,就对其进行解析处理。聊天室客户端一共处理的命令有五种:OKERRLISTJOINQUIT命令。五、程序设计(代码)服务器端设计:引入网络操作命名空间System.Net、System.Net.Sockets;线程处理命名空间System.Threading第一步:界面设计及类与相关成员的定义对界面进行设计(简单)对内部函数进行设计(要编写一个独立的类即Client类,封装了客户端的信息与连接,每一个客户进入聊天室,
6、就创建一个Client对象,用于保存该用户的信息并接收用户数据和发送信息到客户端)几个重要的类:TcpListener类(服务器套接字创建)、Socket类internal static Hashtable clients = new Hashtable();/clients数组保存当前在线用户的client对象 private TcpListener listener;/该服务器默认的监听端口号 static int MAX_NUM = 100; /服务器可以支持的客户端的最大连接数 internal static bool SocketServiceFlag = false;/开始服务的标
7、志/获得本地局域网或者拨号动态分配的IP地址,在启动服务器时会用到IP地址 private string getIPAddress() /获得本机局域网IP地址 IPAddress Addresslist=Dns.GetHostEntry(Dns.GetHostName().AddressList; if (Addresslist.Length1) return ; return Addresslist0.ToString(); /获得动态的IP地址 private static string getDynamicIPAddress() IPAddress Addresslist = Dns.
8、GetHostEntry(Dns.GetHostName().AddressList; if (Addresslist.Length 2) return ; return Addresslist1.ToString(); /服务器监听的端口号通过getValidPort()函数获得 private int getValidPort(string port) int lport; /测试端口号是否有效 try /是否为空 if (port = ) throw new ArgumentException(端口号为空,不能启动服务器); lport = System.Convert.ToInt32(
9、port); catch (Exception e) Console.WriteLine(无效的端口号: + e.ToString(); this.rtbSocketMsg.AppendText(无效的端口号: + e.ToString() + n); return -1; return lport; private void btnSocketStart_Click(object sender, EventArgs e) int port = getValidPort(tbSocketPort.Text); if (port = MAX_NUM) this.rtbSocketMsg.Appe
10、ndText(已经达到了最大连接数: + MAX_NUM + ,拒绝新的链接n); socket.Close(); else /启动一个新的线程 /执行方法this.ServiceClient,处理用户相应的请求 ChatSever.Client.Client client = new ChatSever.Client.Client(this, socket); Thread clientService = new Thread(new ThreadStart(client.ServiceClient); clientService.Start(); Thread.Sleep(200);/提高
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 Socket 聊天室 C#
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【a199****6536】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【a199****6536】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。