Я тестирую приложение, в котором я подключаюсь к серверу с TcpClient, отправляя строки и ожидая ответа. Это работает при переходе через приложение, но при запуске без контрольных точек результат пуст.Проблема при подключении к серверу через 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;
}
}
Может кто-нибудь сказать мне, ПОЧЕМУ АДА réponse заполнена \0
при его запуске в обычном режиме (в результате пустого текста для result
), но содержащее некоторые «полезного» текст, когда пошаговый это? Это сводит меня с ума ... aaarg !!
Заранее благодарен!
Вы останавливаетесь только на 'result = sr.ReadToEnd();' и если нет, может быть, вы не дожидаетесь достаточно долго, чтобы возвращаемый ответ работал нормально? – vipersassassin
Знаете ли вы, сколько времени сервер должен отвечать между записью и чтением? Вы пытались сделать некоторые промежуточные выходы, чтобы проверить, действительно ли вы когда-либо попадали в условие 'if (ns.DataAvailable)? возможно, асинхронный подход будет более уместным? –
Я сделал свою точку останова на методе connect() клиента – Radinator