0
我正在測試一個應用程序,在該應用程序中,我使用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;
}
}
誰能告訴我,憑啥運行時,它通常(導致空白文本result
),但包含一些「有用」文本通過步進時效應初探充滿\0
這個?這讓我發瘋了... aaarg!
提前致謝!
你只是停下來檢查'result = sr.ReadToEnd();'如果不是,你是不是等待足夠長的時間才能正常運行返回的響應? – vipersassassin
你知道服務器在寫入和讀取之間需要多長時間進行響應嗎?你有沒有試過做一些中間輸出來檢查你是否真的進入了'if(ns.DataAvailable)'狀態?也許一個異步的方法會更合適? –
我在客戶端的連接()方法 – Radinator