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;
}
}
誰も私を伝えることができ、WHYをステップ実行するとき(result
のために空白のテキストを生じる)正常にそれを実行しているが、いくつかの「役に立つ」テキストを含むときREPONSEが\0
で満たされているHELLこの?これは私を夢中にさせる... aaarg !!
ありがとうございます!
'result = sr.ReadToEnd();でチェックするのを止めるだけですか?そうでない場合、正常に実行されているときに返された応答を待っていない可能性がありますか? – vipersassassin
サーバーが書き込みと読み取りの間で応答する必要がある時間を知っていますか?あなたは実際に 'if(ns.DataAvailable)'状態に入るかどうかを確認するためにいくつかの中間出力を作成しようとしましたか?多分非同期アプローチがより適切だろうか? –
クライアントのconnect()メソッドでブレークポイントを作成しました – Radinator