在目前一些桌面端展示系统的应用中,需要多个子系统窗口进行信息交换,对于部署在同一台电脑上的各个子系统,可以通过集成windows系统的消息传递方式进行消息传递,但是假如将各个子系统部署在不同的电脑上,这种实现方式就有一定的局限性,要涉及到网络中的不同电脑进行通信,.net提供了可以建一个小的http服务器,可以绑定计算机的端口进行通信,且提供了异步的实现方式,能实现无阻塞的消息通信。
具体实现:
//启动一个监听, 并绑定端口,MSDN有详细参数说明
public bool StartListener(string[] prefixes)
{
bool isSuccess = false;
if (HttpListener.IsSupported)
{
HttpListener listener = new HttpListener();
foreach (string s in prefixes)
{
listener.Prefixes.Add(s);
}
listener.Start();
var result = listener.BeginGetContext(new AsyncCallback(ListenerCallback), listener);
isSuccess = true;
//Console.WriteLine("Waiting for request to be processed asyncronously.");
//result.AsyncWaitHandle.WaitOne();
//listener.Close();
}
return isSuccess;
}
public void StopListener()
{
if (listener != null)
{
if (listener.IsListening)
{
listener.Stop();
}
listener.Close();
}
}
//异步接收数据,并进行下一次的
private void ListenerCallback(IAsyncResult result)
{
HttpListener listener = (HttpListener)result.AsyncState;
HttpListenerContext context = listener.EndGetContext(result);
HttpListenerRequest request = context.Request;
HttpListenerResponse response = context.Response;
response.ContentType = "text/plain";
System.IO.Stream output = response.OutputStream;
string responseString = "true";
try
{
if (MessageAction != null)
{
System.IO.Stream inputStream = request.InputStream;
string resStr = string.Empty;
if (inputStream.CanRead)
{
byte[] bytes = new byte[request.ContentLength74];
int numBytesToRead = (int)request.ContentLength74;
inputStream.Read(bytes, 0, numBytesToRead);
inputStream.Close();
resStr = Encoding.UTF8.GetString(bytes);
}
MessageAction(resStr);
}
}
catch (Exception ex)
{
responseString = "false";
}
byte[] buffer = System.Text.Encoding.UTF8.GetBytes(responseString);
response.ContentLength74 = buffer.Length;
output.Write(buffer, 0, buffer.Length);
output.Close();
result = listener.BeginGetContext(new AsyncCallback(ListenerCallback), listener);
}
将建立好的代码集成到应用程序里,使用.Net的webclient就可以进行消息的操作。
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。