0

我正在测试一个应用程序,在该应用程序中我使用 TcpClient 连接到服务器,发送字符串并等待响应。这在单步执行应用程序时有效,但在没有断点的情况下运行它时,结果为空。

具体来说:我想联系一个 TS3 服务器。这是代码:

class Program
{
    static void Main(string[] args)
    {
        var response = new ServerConnection().GetResponse();
        Console.WriteLine("Response erhalten!");
        Console.WriteLine(response);
        Console.ReadKey();
    }
}

public class ServerConnection
{
    public string GetResponse()
    {
        string result = "";
        using (var client = new TcpClient())
        {
            client.Connect(IPAddress.Parse("193.111.136.17"), 10011);
            using (var ns = client.GetStream())
            {
                byte[] bytesToSend;
                bytesToSend = Encoding.ASCII.GetBytes("help");
                ns.Write(bytesToSend, 0, bytesToSend.Length);
                byte[] response = new byte[1024];
                if (ns.DataAvailable)
                    ns.Read(response, 0, response.Length);

                using (var ms = new MemoryStream(response))
                {
                    using (var sr = new StreamReader(ms))
                    {
                        result = sr.ReadToEnd();
                    }
                }
            }
        }

        return result;
    }
}

谁能告诉我,为什么在正常运行时会填充响应\0(导致空白文本result),但在逐步执行时包含一些“有用”的文本?这让我发疯...... aaarg !

提前致谢!

4

1 回答 1

0

NetworkStream.Read方法是阻塞的,不需要检查NetworkStream.DataAvailable属性的值。

如果您的代码执行“太快”,则NetworkStream.DataAvailable属性的值可能是false,因此不会从流中读取任何数据。

于 2016-11-11T23:11:11.063 回答