抢答器改写TCP版总结,及和UDP版的比较

本文详细比较了TCP和UDP在网络通信中的不同之处,包括消息结构、数据发送接收流程及服务器端实现细节等。强调了UDP的广播特性与TCP的连接管理机制。

TCP和UDP的区别:
   消息结构:UDP首先定义好每一条协议的每一字节的内容,由第一字节的号码来确定受到的小时是什么内容,然后根据预定好的结构来提取数据.而TCP会首先定义一个消息类CMessage,类中可以含CSTRING的变长类,可以变动大小.
   发送数据:UDP用SendTo来发送消息,而TCP不会直接用Send,而是用pMsg->Serialize(*m_pArchiveOut)来发送消息.
   接受数据:UDP通过socket的OnReveive()中用Receive()来把消息接收到一个字符数组,然后用Doc::ProcessPendingRead(char *lbuff)来处理数据,TCP中在OnReveive()中直接调用m_pDoc->ProcessPendingRead()在ProcessPendingRead中调用ReadMsg()来把消息读取到一个消息对象中,然后对消息对象的数据进行处理
  服务器发送消息:UDP不用记录客户端的信息,采用SendTo的广播发送方式,局域网内都可以受到,而TCP用一个指针链表记录各个客户断的通信套接字指针,发送消息时,循环对链表中的每个套接字指针发送一次消息即可.

BUG:发送最终结果,读取文件错误
原因:由于ID号都初始化为0,当发送的号码或者分数有0时就会发生错误,出现-52,这是在UDP中没有发生过的,所以,发送时,ID号都初始化为99,就没有上述问题发生了.

在对 一未命名文件 进行访问时发生了一个不明错误
============================================================================================
TCP首发数据一般不用 SEND RECV,而是直接用serialize(ar)
1.CMessage
2.创建CLISTENSOCKET监听套接字
3.客户端和服务器端的数据套接字
=====================================================================================================
客户端:
Doc::SendMsg()---msg.Serialize(*m_pArchiveOut);
                                m_pArchiveOut->Flush();

Doc::ReceiveMsg()---msg.Serialize(*m_pArchiveIn);
-----------------------------------------------------------------------------------------------------
服务器端:
Doc::SendMsg(pSocket ,pmsg ) ---C***Socket::SendMsg(pmsg):    pMsg->Serialize(*m_pArchiveOut);
                                                m_pArchiveOut->Flush();

CMessage* Doc::ReadMsg( pSocket) --- C***Socket::ReceiveMsg(*pMsg):pMsg->Serialize(*m_pArchiveIn);
==================================================================================

服务器端:
     监听套接字只需要关联DOC,并重载OnAccept()函数. 而通信套接字要关联CMessage和Doc类,而且要有初始化函数,使得创建通信套接字后能够关联CSocketFile和CArchive,从而初始化后就能够开始通信,此外,通信套接字类还要有 SendMSG(pMsg)和RecvMsg(pMsg)函数,使得能够收发数据.

    当某一客户端推出后,应该关闭套接字close(对应create),删除链表元素removeAt(对应addtail),删除套接字指针delete(对应new).
客户端只有通信套接字,只需关联DOC和重载OnReceive即可,因为一个客户端只需要一个通信套接字即可.

 

本软件在支持TCP/IP协议的网络内都可使用,替代传统的电子抢答器,解决传统的电子抢答器极易损坏且布线麻烦费用高等问题,准确灵敏。实际使用台微机作服务器,其他微机与服务器在同局域网上就可以进行抢答,参赛队数目前最多支持 100 个(理论上可以支持无限,但是受图形界面面布局限制)满足绝大多数的抢答需求。 服务端主要功能设置: 1、标题设置:标题内容颜色可以修改,方便于不同场合使用。 2、端口设置:端口可以修改,并避免与其他软件冲突。 3、声音设置:服务端在用户上线、抢答犯规、抢答成功、问题回答正确回答错误或者超都有不同的声音提示。声音可以自行设置。 4、设置分数:初始分、答对加分、打错扣分、抢答扣分、超扣分以及答题限。 5、图形设置:可设置图标数量行列数 以及不同状态下图标的颜色。 6、题号设置:点击题号控制按钮,给所有客户机发送“请做好抢答准备!”信息,但此抢答将会犯规;在点击“开始抢答”后方可正式抢答。犯规者扣分并且只能等待竞答下题。 7、抢答设置:在点击“开始抢答”后方可正式抢答。抢答成功会答题显示倒计面板。 在答题(倒计)面板点击“答对了”按钮加分,点击“答错了”按钮扣分,没点击这两个按钮的话,倒计完成会自动扣分。 8、题目导入:将比赛题目按行录入文本文件(每行题。避免出错编辑题目关闭自动换行)然后从txt文件导入题目。 9、全屏设置:为方便投影展示,可以设置全屏。 客户端主要功能设置: 在客户端输入序号、代表队名称及服务器IP地址,按连接服务器服务器上相应代表队序号图标变色。客户端等待服务器命令进行抢答操作。序号重复会提示更改序号重新连接。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值