问题描述
我正在尝试创建一个HTTP侦听器,该侦听器可以捕获启动服务器(一个exe文件)时发送的json消息。服务器一旦启动并准备就绪,就会发出一定数量的消息。知道已准备就绪的唯一方法是通过收听这些消息。
对我唯一有用的是这个简化的代码,它只捕获发送的第一条消息。
class ListenToMessages
{
public static List<string> playbackMessages = new List<string>();
public static void ListenToServerMessages() { ListenToServerMessagesBase().Wait(); }
private static async Task ListenToServerMessagesBase()
{
try
{
using (var client = new HttpClient())
{
//var result = await client.GetAsync("http://localhost:8888/server/commmessages");
var content = await client.GetStringAsync("http://localhost:8888/server/commmessages");
if (content != "[]")
{
Console.WriteLine(" received message from http://localhost:8888/server/commmessages: '{0}'",content);
playbackMessages.Add(content);
}
}
}
catch (Exception ex) { Console.WriteLine(ex.ToString()); }
}
}
即使我将对ListenToServerMessages的调用放在循环中,它也仍然只会捕获第一条消息。这种方法的问题在于,它可能会错过捕获某些消息的机会,因此这似乎不是一个确定的方法。
然后我尝试创建一个简单的侦听器,但这将在GetContext()处停止,然后必须停止该应用程序。
class SimpleListener
{
// This example requires the System and System.Net namespaces.
public static void SimpleListenerExample(string prefix = "http://localhost:8888/server/commmessages" )
{
if (string.IsNullOrEmpty(prefix)) prefix = "http://localhost:8888/server/commmessages";
HttpListener listener = new HttpListener();
listener.Prefixes.Add(prefix);
listener.Start();
Console.WriteLine("Listening...");
// Note: The GetContext method blocks while waiting for a request.
HttpListenerContext context = listener.GetContext();
// Obtain a response object.
HttpListenerResponse response = context.Response;
// print messages
Console.WriteLine(response.StatusCode);
Console.WriteLine(response.ContentType);
Console.WriteLine(response.ToString());
listener.Stop();
}
}
我在这里可能做错了什么?感谢您的帮助
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)