我正在编写一个既有服务器端又有客户端的程序,客户端将连接到由同一程序托管的服务器(但是通过另一个实例,通常在另一台机器上)。所以基本上,我可以控制协议的两个方面。
我在双方使用BeginReceive()
和BeginSend()
来发送和接收数据。我的问题是这两个陈述是否属实:
使用对BeginReceive()的调用将为我提供在调用回调函数时通过对另一端的BeginSend()的单次调用发送的全部数据。
使用对BeginSend()的调用将把我传递给它的整个数据发送到另一端,并且通过一次调用另一端的BeginReceive()来接收所有数据。
< / LI> 醇>
事实上两者基本相同。
如果答案是否定的,我猜的是基于我读过的关于套接字的情况,处理命令的最佳方法是什么?我正在编写一个包含PUT X Y
等命令的游戏。我想在每个命令的末尾添加一个特殊字符(例如#
),每次收到数据时,我都会将它附加到缓冲区,然后在遇到{{1}后才解析它}。
答案 0 :(得分:1)
不,您不能指望BeginReceive
必须从一次BeginSend
的来电中接收所有数据。您可以在一次调用中将{em> lot 数据发送到BeginSend
,这很可能会分成几个数据包。您可以在单独的接收呼叫中接收每个数据包的数据。
将流拆分为多个块的两种主要方式是: