Unity - A计划(永久有效期) 扫二维码继续学习 二维码时效为半小时

(196评价)
价格: 4019.00元
TCP发送客户端
大旭发起了问答13天前
1
回复
22
浏览

在《分布式网络与帧同步》课程中,任务12,有几个疑问:

1. client → server,数据传输的格式为总长度+协议名长度+协议名+协议体,

    但是在server → client时,数据传输的格式为总长度+协议名+协议体,为什么要省略协议名长度?

2. 在编写Send()时,将要发送的数据做成ByteArray类型的对象,压进队列,然后判断队列里的成员数量count == 1,为什么不是count >= 1,如果队列里要是有多个成员(不止一个成员),不应该是多个成员依次进行发送吗?

3. socket.BeginSend(sendBytes , 0 , sendBytes.Length , 0 , SnedCallback , socket); 这句代码中发送的数据直接使用的是sendBytes,而不是从队列中提取出数据,这是为什么?如果直接使用sendBytes,那为什么还要将sendBytes存入队列?

所有回复
  • 老师_Trigger 13天前

    1. 对于传输的格式,client → server 和 server → client 之间存在一些差异是很常见的。在这个情况下,为了简化协议格式,可能认为协议名的长度是固定的,因此在 server → client 的传输中省略了协议名长度。这种设计可以减少传输数据的字节数,提高传输效率。

    2. 在编写 Send() 方法时,判断队列里的成员数量是否等于 1,可能是为了确保发送的数据是按顺序发送的,并且每次只发送一个数据包。如果队列里有多个成员,可能会导致并发发送,可能会造成数据包的顺序混乱,或者发送过多的数据包导致网络拥塞。通过只发送队列中的第一个成员,可以确保发送顺序正确,并且控制发送速率,避免网络拥塞。

    3. 在 `socket.BeginSend(sendBytes, 0, sendBytes.Length, 0, SendCallback, socket)` 这句代码中,确实直接使用了 sendBytes 来发送数据,而没有从队列中提取出数据。这可能是因为在发送数据之前,已经将要发送的数据写入了 sendBytes 中,然后直接使用 sendBytes 来发送数据。而将 sendBytes 存入队列可能是为了将待发送的数据包进行排队,以便在 Send() 方法中逐个发送,以确保发送的顺序正确。另外,存入队列也可能是为了异步发送数据时,确保每次发送的数据包是完整的,而不是被异步操作修改了。

    还有-5条回复,点击查看
    你还没有登录,请先登录注册
发表回复
你还没有登录,请先 登录或 注册!