C#插座的政策文件服务器,用于低级别AS3。0座连接?
-
05-07-2019 - |
题
我怎么去做一个插座的政策文件服务器。它所要做的是听取关于港口843string"<policy-file-request />"随后通过a NULL byte然后返回XML string(这是座的政策文件)。
我没有编码的这种事情之前,我不知道从哪里开始。我是创造它的windows服务?任何提示或链接是值得欢迎的。
背景:
联系网络服务从闪光灯我使用的'as3httpclient图书馆,而不是URLRequest/URLLoader.这是因为它让我能够发送的定制标题与获得请求。该图书馆采用低级别插座,以做的东西。
当闪使用的低级别插座连接到一个服务器,它看起来一座政策文件,这需要提供了一个插座的政策文件服务器。
解决方案
一些事情要知道的用你所提议的架构:
主要是你需要知道,即使可以聊天http在一个较低的水平,使用座,有很大数量的情况下通信,以这种方式将会失败。主要是这些失败将会发生,如果用户有一个代理服务器启用在他们的浏览器,因为没有有效的手段发现并随后使用代理连接时通过一个插座。
为了使政策服务器,可以使用 TcpListener 类。你就开始听着如下:
var tcpListener = new TcpListener(IPAddress.Any, 843 );
tcpListener.start();
tcpListener.BeginAcceptTcpClient(new AsyncCallback(NewClientHandler), null);
该方法NewClientHandler会的形式:
private void NewClientHandler(IAsyncResult ar)
{
TcpClient tcpClient = tcpListener.EndAcceptTcpClient(ar);
...
在这一点上你可能想要提供tcpClient对象的一类自己创作,以处理验证的数据来自座。我要叫它RemoteClient.
在RemoteClient,你会有这样的事情:
var buffer=new byte[BUFFER_SIZE];
tcpClient.GetStream().BeginRead(buffer, 0, buffer.Length, Receive, null);
和一个接收方法:
private void Receive(IAsyncResult ar)
{
int bytesRead;
try
{
bytesRead = tcpClient.GetStream().EndRead(ar);
}
catch (Exception e)
{
//something bad happened. Cleanup required
return;
}
if (bytesRead != 0)
{
char[] charBuffer = utf8Encoding.GetChars(buffer, 0, bytesRead);
try
{
tcpClient.GetStream().BeginRead(buffer, 0, buffer.Length, Receive, null);
}
catch (Exception e)
{
//something bad happened. Cleanup required
}
}
else
{
//socket closed, I think?
return;
}
}
和一些发送的方法:
public void Send(XmlDocument doc)
{
Send(doc.OuterXml);
}
private void Send(String str)
{
Byte[] sendBuf = utf8Encoding.GetBytes(str);
Send(sendBuf);
}
private void Send(Byte[] sendBuf)
{
try
{
tcpClient.GetStream().Write(sendBuf, 0, sendBuf.Length);
tcpClient.GetStream().WriteByte(0);
tcpClient.GetStream().WriteByte(13); //very important to terminate XmlSocket data in this way, otherwise Flash can't read it.
}
catch (Exception e)
{
//something bad happened. cleanup?
return;
}
}
这就是所有重要细节,我认为。我写了这个一段时间以前...该接收方法看起来像它可以做一个返工,但应该足以让你开始。
其他提示
创建一个倾听的座。
当连接打开,执行一个接收和等待预期的串。在收到发送文件的内容,然后关闭座。
这个包裹在一个服务(运行一个低的特权帐户)。
大部分工作是完成了 系统。网。插座。插座 类,文件中包含的一样,API非常类似于BSD socket API整体(主要有一个1:1映从BSD API向插座(或帮助的类型)方法),因此任何背景应该是很容易翻译。
我不得不对这项任务与这两个Java和C#他们都相当类似的。
你可以看看 java政策文件.
有些问题可以看到这个回答: https://stackoverflow.com/a/12854204/1343667