C#服务端:
废话少说,直接代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using CookComputing.XmlRpc;
using System.Net;
using System.Threading;
namespace XMLRPC
{
public delegate void CallBackDelegate(string message);
/// <summary>
/// 该部件接受ida 调试数据,用显示分析
/// listener.Prefixes.Add(@"http://*:11000/"); 需要管理权限
/// </summary>
public class IDAServer : XmlRpcService
{
private static XmlRpcListenerService _svc = new SimpleService();
public static void Start(CallBackDelegate fn)
{
Thread sv = new Thread( Run);
sv.Start(fn);
}
static void Run(Object fn )
{
HttpListener listener = new HttpListener();
// listener.Prefixes.Add(@"http://localhost:11000/");
listener.Prefixes.Add(@"http://*:11000/");
Thread.Sleep(1000);
listener.Start();
while (true)
{
HttpListenerContext context = listener.GetContext();
XmlRpcListenerService svc = new SimpleService();
((SimpleService)svc).Host = (CallBackDelegate)fn;
svc.ProcessRequest(context);
}
}
}
public class SimpleService : XmlRpcListenerService
{
[XmlRpcMethod("server.getStateName")]
public string GetStateName(string stateNumber)
{
Host?.Invoke("Hi " + stateNumber);
return "Hi " + stateNumber;
}
[XmlRpcMethod("server.hello")] //即可写方法注解,也可写类注解,此为方法注解
public string hello(string param)
{
Host?.Invoke(param);
return "hello world " + param;
}
public CallBackDelegate Host;
}
}
在窗体程序承载服务
private void button_Click(object sender, RoutedEventArgs e)
{
if (button.IsEnabled)
{
IDAServer.Start(svcMessage);
button.IsEnabled = false;
textBox.Text = textBox.Text + "\n IDAServer.Start()\n";
}
}
Python 客户端:
import xmlrpclib
Host = xmlrpclib.ServerProxy("http://192.168.2.2:11000")
words = Host.server.hello(" Client Message")
print "result:" + words