博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
抢答器改写TCP版总结,及和UDP版的比较
阅读量:2233 次
发布时间:2019-05-09

本文共 1768 字,大约阅读时间需要 5 分钟。

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即可,因为一个客户端只需要一个通信套接字即可.

 

转载地址:http://osbbb.baihongyu.com/

你可能感兴趣的文章
Leetcode C++《热题 Hot 100-22》2.两数相加
查看>>
Leetcode C++《热题 Hot 100-23》3.无重复字符的最长子串
查看>>
Leetcode C++《热题 Hot 100-24》5.最长回文子串
查看>>
Leetcode C++《热题 Hot 100-28》19.删除链表的倒数第N个节点
查看>>
Leetcode C++《热题 Hot 100-29》22.括号生成
查看>>
Leetcode C++《热题 Hot 100-47》236.二叉树的最近公共祖先
查看>>
Leetcode C++《热题 Hot 100-48》406.根据身高重建队列
查看>>
《kubernetes权威指南·第四版》第二章:kubernetes安装配置指南
查看>>
Leetcode C++《热题 Hot 100-49》399.除法求值
查看>>
Leetcode C++《热题 Hot 100-51》152. 乘积最大子序列
查看>>
Leetcode C++ 《第181场周赛-1》 5364. 按既定顺序创建目标数组
查看>>
Leetcode C++ 《第181场周赛-2》 1390. 四因数
查看>>
阿里云《云原生》公开课笔记 第一章 云原生启蒙
查看>>
阿里云《云原生》公开课笔记 第二章 容器基本概念
查看>>
阿里云《云原生》公开课笔记 第三章 kubernetes核心概念
查看>>
阿里云《云原生》公开课笔记 第四章 理解Pod和容器设计模式
查看>>
阿里云《云原生》公开课笔记 第五章 应用编排与管理
查看>>
阿里云《云原生》公开课笔记 第六章 应用编排与管理:Deployment
查看>>
阿里云《云原生》公开课笔记 第七章 应用编排与管理:Job和DaemonSet
查看>>
阿里云《云原生》公开课笔记 第八章 应用配置管理
查看>>