使用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()
后才能得到保证?我认为上面的一个或两个都是阻止呼叫。如果在没有抛出异常的情况下完成,我是否可以将其视为已发送/接收整个消息?
答案 0 :(得分:1)
您需要收到对方的确认。备选方案:
Shutdown(Read)
建立连接。调用Read
直到它返回0. 0表示远程端已关闭并且已收到所有数据。单独发送不保证交付。