socket通信之九:使用完成端口实现的一个聊天室

本文介绍了如何使用Windows平台下的完成端口IO模型实现一个多客户端聊天室。通过启动服务器和客户端,建立连接,维护socket连接列表,实现了聊天室的功能。完成端口模型在资源消耗和连接限制方面具有优势,适合构建聊天室。客户端和服务器端的程序分析展示了如何处理连接、接收和发送消息的过程。
摘要由CSDN通过智能技术生成

基本上windows平台下的几种IO模型都实现了一遍,还有两个没有实现,但是它们一个需要基于windows消息,一个和重叠IO中的事件通知模型比较类似,并且不能实现真正的异步,所以就不列出来了。


这一篇介绍如何实现一个聊天室。前面介绍的几种模型中除了基本的socket模型和阻塞版本的模型之外都可以用来实现聊天室,因为这两个模型还不能实现支持多个客户端。对于其它的几个模型,我们需要做的只是在原来模型的基本上维护一个socket连接的列表即可。这里使用完成端口来实现聊天室。使用其它的模型基本上也是这个思路,之所以使用这个是因为它不像多线程那样耗费资源,也不像selelct和重叠IO中基于事件通知的模型那样有连接限制,相比与重叠IO中的完成例程模型,不需要考虑负载均衡的问题。所以就是它了。


1.程序运行流程


先插入几张程序运行的截图。


1.1.启动服务器端的程序和客户端的程序


下图左侧是服务器端程序的启动界面,右图是客户端启动的界面。

对服务器端而言:

  1. 第一行代表的是本机的ip地址,也就是服务器端的ip地址,客户端中服务器ip地址这一栏需要填上这个地址;
  2. 端口号表示服务器端绑定的端口号,这个端口号可以自己指定。客户端中对应的端口号需要填上服务器端绑定的这个端口号,这样客户端才可以连上上服务器端。

对客户端而言:

  1. 服务器ip地址填上服务器端指定的ip地址,端口填上服务器端绑定的端口号;
  2. 如果客户端和服务器端在同一台机器上启动,此时的客户端中填写的服务器ip地址是正确的,否则需要根据服务器端的ip地址更改;
  3. 客户端需要指定一个昵称,用来标示不同的客户端,这个标示不能为空;
  4. 这里我允许有重复的昵称,如果不允许,只需要加上一定的判断就可以了。




1.2.点击服务器端的开启服务器


点击了开启服务器后,服务器才会启动,此时在下面的“信息”栏中会显示“创建启动线程成功!”,“服务器端已启动......”等字样。




1.3.客户端连接服务器


服务器端启动以后客户端就可以连接服务器了,现在“昵称”后面的编辑框中输入一个昵称,接着点击“连接服务器”按钮即可。

客户端会提示“连接服务器成功!”,“allanxia成功登陆!”这两行文字。

服务器端会提示“客户端连接:10.11.163.113:707”,“allanxia 登陆成功!”,其中第一条消息指示的是连接的客户端的ip地址和端口号,第二条信息指示的是客户端的昵称。



如果又有一个客户端连接,如下图:

会发生下面的情况:

服务端会受到Bill Gates的登陆信息;

已经连接的客户端(这里只有allanxia)也会收到他的登陆信息;

自身也会收到登陆消息。



接着再连接一个客户端:和上面同样的原理。




1.4.客户端通信


现在allanxia这个客户端发送一条消息“大家好,我是allanxia”,所有的客户端就都收到这个消息了。



现在大家就可以畅所欲言了。这就是基本的模型了,如果有客户端退出,服务器端会收到通知,但是客户端就不会收到通知了,这就是聊天室的基本模型了。




2.程序分析


这里我使用的是完成端口的模型,原理上讲其它几个支持多客户端的模型都可以用来实现这个聊天室。


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值