我試圖從網絡流中讀取已知長度的消息。 我有點期待NetworkStream.Read()
將等待返回,直到我給它的緩衝區數組已滿。如果不是,那麼ReadTimeout
屬性有什麼意義?我使用的測試我的理論從NetworkStream讀取特定的字節數
public static void Main(string[] args)
{
TcpListener listener = new TcpListener(IPAddress.Any, 10001);
listener.Start();
Console.WriteLine("Waiting for connection...");
ThreadPool.QueueUserWorkItem(WriterThread);
using (TcpClient client = listener.AcceptTcpClient())
using (NetworkStream stream = client.GetStream())
{
Console.WriteLine("Connected. Waiting for data...");
client.ReceiveTimeout = (int)new TimeSpan(0, 1, 0).TotalMilliseconds;
stream.ReadTimeout = (int)new TimeSpan(0, 1, 0).TotalMilliseconds;
byte[] buffer = new byte[1024];
int bytesRead = stream.Read(buffer, 0, buffer.Length);
Console.WriteLine("Got {0} bytes.", bytesRead);
}
listener.Stop();
Console.WriteLine("Press any key to exit...");
Console.ReadKey(true);
}
private static void WriterThread(object state)
{
using (TcpClient client = new TcpClient())
{
client.Connect(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 10001));
using (NetworkStream stream = client.GetStream())
{
byte[] bytes = Encoding.UTF8.GetBytes("obviously less than 1024 bytes");
Console.WriteLine("Sending {0} bytes...", bytes.Length);
stream.Write(bytes, 0, bytes.Length);
Thread.Sleep(new TimeSpan(0, 2, 0));
}
}
}
結果的那
示例代碼:
Waiting for connection...
Sending 30 bytes...
Connected. Waiting for data...
Got 30 bytes.
Press any key to exit...
有沒有做一個同步讀取時指定的字節數,只有返回的標準方法被讀過?我確信自己寫一個不是太複雜,但是在TcpClient
和NetworkStream
之間存在超時屬性表明它應該已經以這種方式工作。
超過1k代表,仍然設法省略一個最有用的標籤。 'head-> desk' –
我不明白這是怎麼一個C#相關的問題。不明白assattery。 –
你在用什麼編程語言?它確實像C#一樣。 –