TcpClient - 如何确定何时传递字节?

时间:2014-10-08 14:55:55

标签: .net tcp .net-4.0 tcpclient

使用TcpClient时,如何知道服务器有没有收到?例如,假设我的消息是一个非常长的字符串:

string myAppMessage = "was up too late coding, bla, bla, bla, ....."
byte[] allBytes = Encoding.ASCII.GetBytes( myAppMessage );

我想将整个字符串传递给TCP,我想知道整个字符串已经传送到服务器并由服务器接收。

似乎有一些通过TCP发送数据的常用方法:

var client = new TcpClient( IP_ADDR , PORT )
client.GetStream().Write( allBytes )

-OR -

client.Client.Send( allBytes )

其中一个或两个是否保证整个邮件的传递?在第一种情况下,它是否仅在我在流上调用Flush()后才能得到保证?我认为上面的一个或两个都是阻止呼叫。如果在没有抛出异常的情况下完成,我是否可以将其视为已发送/接收整个消息?

1 个答案:

答案 0 :(得分:1)

您需要收到对方的确认。备选方案:

  1. 请远程方向您发送确认。
  2. 让远程方Shutdown(Read)建立连接。调用Read直到它返回0. 0表示远程端已关闭并且已收到所有数据。
  3. 呼叫关机(写入)。这等待来自远程端的确认。
  4. 单独发送不保证交付。