Silverlight實用竅門系列:67.Silverlight下的Socket通訊
<p> 在Silverlight中進行通訊,只能使用4502-4534之間的埠進行資料傳輸,另外Silverlight客戶端會自動向943埠的伺服器端傳送一個“<policy-file-request/>”的語句請求,然後伺服器端943埠回發以下檔案以許可Socket通訊。</p>
<div class=”cnblogs_code”>
<pre><?xml version=<span style=”color: #800000;”>”</span><span style=”color: #800000;”>1.0</span><span style=”color: #800000;”>”</span> encoding=<span style=”color: #800000;”>”</span><span style=”color: #800000;”>utf-8</span><span style=”color: #800000;”>”</span> ?>
<access-policy>
<cross-domain-access>
<policy>
<allow-<span style=”color: #0000ff;”>from</span>>
<domain uri=<span style=”color: #800000;”>”</span><span style=”color: #800000;”>*</span><span style=”color: #800000;”>”</span>/>
</allow-<span style=”color: #0000ff;”>from</span>>
<grant-to>
<socket-resource port=<span style=”color: #800000;”>”</span><span style=”color: #800000;”>4502-4534</span><span style=”color: #800000;”>”</span> protocol=<span style=”color: #800000;”>”</span><span style=”color: #800000;”>tcp</span><span style=”color: #800000;”>”</span>/>
</grant-to>
</policy>
</cross-domain-access>
</access-policy></pre>
</div>
<p> A.現在我們首先來看伺服器端的程式碼,主要分為策略響應步驟和服務響應步驟。</p>
<p> <strong>策略步驟一</strong>:啟動監聽943埠是否有需要安全策略檔案請求</p>
<p> <strong>策略步驟二</strong>:如果客戶端請求是<policy-file-request/>,則將安全策略檔案作為bytes傳送給客戶端</p>
<p> <strong>服務步驟一</strong>:啟動伺服器端,監聽4525埠,是否有Socket對話請求</p>
<p> <strong>服務步驟二</strong>:如果有客戶端請求的連線,則傳送訊息告知客戶端</p>
<p> 程式碼如下:</p>
<div class=”cnblogs_code”>
<pre> <span style=”color: #0000ff;”>class</span><span style=”color: #000000;”> Program
{
</span><span style=”color: #0000ff;”>static</span> <span style=”color: #0000ff;”>void</span> Main(<span style=”color: #0000ff;”>string</span><span style=”color: #000000;”>[] args)
{
</span><span style=”color: #008000;”>//</span><span style=”color: #008000;”>策略步驟一:啟動監聽943埠是否有需要安全策略檔案請求</span>
Thread access = <span style=”color: #0000ff;”>new</span> Thread(<span style=”color: #0000ff;”>new</span><span style=”color: #000000;”> ThreadStart(accessThread));
access.Start();
</span><span style=”color: #008000;”>//</span><span style=”color: #008000;”>服務步驟一:啟動伺服器端,監聽4525埠,是否有Socket對話請求</span>
Thread server = <span style=”color: #0000ff;”>new</span> Thread(<span style=”color: #0000ff;”>new</span><span style=”color: #000000;”> ThreadStart(ServerThread));
server.Start();
}
</span><span style=”color: #008000;”>//</span><span style=”color: #008000;”>策略請求監聽</span>
<span style=”color: #0000ff;”>static</span> <span style=”color: #0000ff;”>void</span><span style=”color: #000000;”> accessThread()
{
</span><span style=”color: #008000;”>//</span><span style=”color: #008000;”>獲取943埠監聽的Socket服務端</span>
Socket socket = GetSocketServer(<span style=”color: #800080;”>943</span><span style=”color: #000000;”>);
</span><span style=”color: #0000ff;”>while</span> (<span style=”color: #0000ff;”>true</span><span style=”color: #000000;”>)
{
Socket new_access </span>=<span style=”color: #000000;”> socket.Accept();
</span><span style=”color: #0000ff;”>string</span> clientPolicyString = <span style=”color: #800000;”>”</span><span style=”color: #800000;”><policy-file-request/></span><span style=”color: #800000;”>”</span><span style=”color: #000000;”>;
</span><span style=”color: #0000ff;”>byte</span>[] requestbytes = <span style=”color: #0000ff;”>new</span> <span style=”color: #0000ff;”>byte</span><span style=”color: #000000;”>[clientPolicyString.Length];
new_access.Receive(requestbytes);
</span><span style=”color: #0000ff;”>string</span> requeststring = System.Text.Encoding.UTF8.GetString(requestbytes, <span style=”color: #800080;”>0</span><span style=”color: #000000;”>, requestbytes.Length);
</span><span style=”color: #0000ff;”>if</span> (requeststring ==<span style=”color: #000000;”> clientPolicyString)
{
</span><span style=”color: #008000;”>//</span><span style=”color: #008000;”>策略步驟二:如果客戶端請求是<policy-file-request/>,則將安全策略檔案作為bytes傳送給客戶端</span>
<span style=”color: #0000ff;”>byte</span>[] accessbytes =<span style=”color: #000000;”> GetPolicyToClient();
new_access.Send(accessbytes, accessbytes.Length, SocketFlags.None);
new_access.Close();
}
Thread.Sleep(</span><span style=”color: #800080;”>100</span><span style=”color: #000000;”>);
}
}
</span><span style=”color: #0000ff;”>static</span> <span style=”color: #0000ff;”>void</span><span style=”color: #000000;”> ServerThread()
{
</span><span style=”color: #008000;”>//</span><span style=”color: #008000;”>獲取4525埠監聽的Socket服務端</span>
Socket socket = GetSocketServer(<span style=”color: #800080;”>4525</span><span style=”color: #000000;”>);
</span><span style=”color: #0000ff;”>while</span> (<span style=”color: #0000ff;”>true</span><span style=”color: #000000;”>)
{
Socket _socket </span>=<span style=”color: #000000;”> socket.Accept();
</span><span style=”color: #008000;”>//</span><span style=”color: #008000;”>服務步驟二:如果有客戶端請求的連線,則傳送訊息告知客戶端</span>
<span style=”color: #0000ff;”>byte</span>[] b2 = <span style=”color: #0000ff;”>new</span> <span style=”color: #0000ff;”>byte</span>[<span style=”color: #800080;”>1024</span><span style=”color: #000000;”>];
_socket.Receive(b2);
Console.WriteLine(Encoding.UTF8.GetString(b2).Replace(</span><span style=”color: #800000;”>”</span><span style=”color: #800000;”>
相關文章
- Silverlight實用竅門系列:4.Silverlight 4.0新增滑鼠右鍵選單和Silverlight全屏模式的進入退出。【附帶原始碼例項】...模式原始碼
- socket通訊
- socket通訊的建立
- php的socket通訊PHP
- JS實時通訊三把斧系列之二: socket.ioJS
- C# 通過socket實現UDP 通訊C#UDP
- unix socket通訊
- 簡單的Socket通訊
- 5 分鐘掌握 JavaScript 實用竅門JavaScript
- 45個實用的JavaScript技巧、竅門和最佳實踐JavaScript
- c#實現最簡單的socket通訊C#
- 程式間通訊(Socket)
- socket.IO通訊
- Android Socket 通訊Android
- 【Python】socket通訊Python
- socket 完成簡單的通訊
- 基於 socket.io 快速實現一個實時通訊應用
- 什麼時候採用socket通訊,什麼時候採用http通訊HTTP
- silverlight於javascript通訊JavaScript
- socket.io通訊原理
- Android TCP socket通訊AndroidTCP
- Socket套接字通訊原理
- C# 如何實現簡單的Socket通訊(附示例)C#
- 通過 Socket 實現 TCP 程式設計入門TCP程式設計
- 通過 Socket 實現 UDP 程式設計 入門UDP程式設計
- 10個實用的UX設計作品推銷小竅門UX
- iOS基於Socket.io即時通訊IM實現,WebRTC實現視訊通話iOSWeb
- Java的Socket通訊簡單例項Java單例
- koa-socket即時通訊
- Socket.IO IM通訊元件元件
- 溫故之.NET Socket通訊
- vue3 快速入門系列 —— 元件通訊Vue元件
- C# 實現socket通訊程式(伺服器端)C#伺服器
- (轉)Linux下 C++呼叫C 實現socket網路通訊程式設計LinuxC++程式設計
- Java入門系列-25-NIO(實現非阻塞網路通訊)Java
- Java 和 Python 之間的 Socket 通訊JavaPython
- 深入淺出講解:php的socket通訊PHP
- Java基礎(Socket通訊和NIO)Java