我有以下代碼:如何使用TcpListener發送數據並等待響應?
using (TcpClient client = new TcpClient())
{
client.Connect(host, port);
using (SslStream stream = new SslStream(client.GetStream(), true))
{
stream.AuthenticateAsClient(host);
stream.Write(System.Text.Encoding.ASCII.GetBytes(dataToSend));
int byteRead = 0;
byte[] buffer = new byte[1000];
do
{
byteRead = stream.Read(buffer, 0, 1000);
reponse += System.Text.Encoding.ASCII.GetString(buffer, 0, byteRead);
}
while (byteRead > 0);
}
}
我發送一個字符串到服務器,然後等待響應。
這是正確的方法嗎?
如果服務器需要一些時間來處理我發送的內容,它仍然會工作或將流.Read返回0並退出循環?或者,如果響應中的某些數據包丟失並需要重新發送,它是否仍然有效?
您不應該擔心TCP連接丟失數據,而是由網絡代碼來確保通過再次詢問丟失的數據包不會發生。它對你的應用程序是透明的。 – RedGlyph 2009-10-23 20:06:58
我知道我不能丟失數據,但我擔心延遲的數據。我不知道Read會阻止。 MSDN文檔不是很清楚。它說: 「此方法讀取數據到buffer參數並返回成功讀取的字節數。如果沒有數據可用於讀取,則Read方法返回0.」 所以我認爲,如果服務器還沒有處理我的字符串,我的閱讀將返回0,我永遠不會收到任何東西。 由於Read是一種阻止方法,所以沒關係。 – Kevin 2009-10-23 22:51:42