我有以下代码:
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);
}
}
我将一个字符串发送到服务器,然后等待响应。
这是正确的方法吗?
如果服务器需要一些时间来处理我发送的内容,它是否仍然可以工作或将流。返回0并退出循环?或者,如果来自响应的某些数据包丢失并需要重新发送,它是否仍然有效?
答案 0 :(得分:5)
代码的整体结构看起来是正确的。
byteRead = stream.Read(buffer, 0, 1000);
将阻塞,直到从服务器检索到所有响应数据。如果远程服务器关闭连接(超时等),将返回0。
请参阅备注found here。
该框架将正确处理网络操作期间丢失的数据包 - 不用担心它们。
答案 1 :(得分:-1)
public string Method()
{
m_Client = new TcpClient();
m_Client.Connect(m_Server, m_Port);
m_Stream = m_Client.GetStream();
m_Writer = new StreamWriter(m_Stream);
m_Reader = new StreamReader(m_Stream);
m_Writer.WriteLine(request);
m_Writer.Flush();
return m_Reader.ReadToEnd();
}