TCP客户端无法读取某些计算机上的所有响应

本文关键字:响应 计算机 客户端 读取 TCP | 更新日期: 2023-09-27 18:18:18

我使用这个MS样本代码从我的Apache服务器读取响应,但在一些计算机上,c#应用程序只是读取HTTP HEADER,不读取正文。例如,如果我把"Hello"放在我的索引页上,它只读取头包括HTTP/1.1 200 OK DATE:......

不包括我放在索引页的内容。

我试着增加数据的大小,但是没有区别。

TcpClient client = new TcpClient(server, port);
// Translate the passed message into ASCII and store it as a Byte array.
Byte[] data = System.Text.Encoding.ASCII.GetBytes(message);         
// Get a client stream for reading and writing.
//  Stream stream = client.GetStream();
NetworkStream stream = client.GetStream();
// Send the message to the connected TcpServer. 
stream.Write(data, 0, data.Length);
Console.WriteLine("Sent: {0}", message);         
// Receive the TcpServer.response.
// Buffer to store the response bytes.
data = new Byte[256];
// String to store the response ASCII representation.
String responseData = String.Empty;
// Read the first batch of the TcpServer response bytes.
Int32 bytes = stream.Read(data, 0, data.Length);
responseData = System.Text.Encoding.ASCII.GetString(data, 0, bytes);
Console.WriteLine("Received: {0}", responseData);         
// Close everything.
stream.Close();         
client.Close();     

TCP客户端无法读取某些计算机上的所有响应

Read方法可以在读取部分响应后返回。您必须循环并将数据复制到MemoryStream,直到没有更多的数据要接收。然后解码整条信息

MemoryStream memoryStream = new MemoryStream();
Int32 bytes = 0;
do
{
    bytes = stream.Read(data, 0, data.Length);
    memoryStream.Write(data, 0, bytes);
}
while (stream.DataAvailable);
responseData = Encoding.ASCII.GetString(memoryStream.ToArray());

正如@YacoubMassad在评论中注意到的,如果你连接到一个http服务器,你可以使用HttpClient