aaarticlea/png;base64,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" alt="" />

在Silverlight中进行通讯,只能使用4502-4534之间的端口进行数据传输,另外Silverlight客户端会自动向943端口的 服务器端发送一个“<policy-file-request/>”的语句请求,然后服务器端943端口回发以下文件以许可Socket通 讯。

clientaccesspolicy.xml文件

<?xml version="1.0" encoding="utf-8" ?>
<access-policy>
<cross-domain-access>
<policy>
<allow-from>
<domain uri="*"/>
</allow-from>
<grant-to>
<socket-resource port="4502-4534" protocol="tcp"/>
</grant-to>
</policy>
</cross-domain-access>
</access-policy>

  A.现在我们首先来看服务器端的代码,主要分为策略响应步骤和服务响应步骤。

  策略步骤一:启动监听943端口是否有需要安全策略文件请求

  策略步骤二:如果客户端请求是<policy-file-request/>,则将安全策略文件作为bytes发送给客户端

  服务步骤一:启动服务器端,监听4525端口,是否有Socket对话请求

  服务步骤二:如果有客户端请求的连接,则发送消息告知客户端

  代码如下:

    class Program
{
static void Main(string[] args)
{
//策略步骤一:启动监听943端口是否有需要安全策略文件请求
Thread access = new Thread(new ThreadStart(accessThread));
access.Start(); //服务步骤一:启动服务器端,监听4525端口,是否有Socket对话请求
Thread server = new Thread(new ThreadStart(ServerThread));
server.Start();
}
//策略请求监听
static void accessThread()
{
//获取943端口监听的Socket服务端
Socket socket = GetSocketServer();
while (true)
{
Socket new_access = socket.Accept();
string clientPolicyString = "<policy-file-request/>";
byte[] requestbytes = new byte[clientPolicyString.Length];
new_access.Receive(requestbytes);
string requeststring = System.Text.Encoding.UTF8.GetString(requestbytes, , requestbytes.Length); if (requeststring == clientPolicyString)
{
//策略步骤二:如果客户端请求是<policy-file-request/>,则将安全策略文件作为bytes发送给客户端
byte[] accessbytes = GetPolicyToClient();
new_access.Send(accessbytes, accessbytes.Length, SocketFlags.None);
new_access.Close();
}
Thread.Sleep();
}
} static void ServerThread()
{
//获取4525端口监听的Socket服务端
Socket socket = GetSocketServer();
while (true)
{
Socket _socket = socket.Accept();
//服务步骤二:如果有客户端请求的连接,则发送消息告知客户端
byte[] b2 = new byte[];
_socket.Receive(b2);
Console.WriteLine(Encoding.UTF8.GetString(b2).Replace("\0", ""));
string recString = "我已经收到消息了";
_socket.Send(Encoding.UTF8.GetBytes(recString));
_socket.Close();
Thread.Sleep();
}
}
//根据端口建立Socket服务器端
static Socket GetSocketServer(int serverPort)
{
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
socket.Bind(new IPEndPoint(IPAddress.Any, serverPort));
socket.Listen();
return socket;
}
//获取安全策略文件的byte[]
static byte[] GetPolicyToClient()
{
string path = Environment.CurrentDirectory.Replace("\\bin\\Debug","");
FileStream fs = new FileStream(path+ @"\clientaccesspolicy.xml", FileMode.Open);
int length = (int)fs.Length;
byte[] bytes = new byte[length];
fs.Read(bytes, , length);
fs.Close();
return bytes;
} }

  B.其次我们来看客户端操作,分为以下几个步骤:

  客户端步骤一:发起服务器连接请求。

  客户端步骤二:连接服务器成功,将需要发送的数据放入缓冲区中,然后异步向服务器发送消息请求

  客户端步骤三:消息发送成功,此时设置一个新的缓冲区实例,并且发起异步接收服务器返回的消息

  客户端步骤四:获取到服务器返回的消息,关闭Socket 

  客户端cs代码如下:

    public partial class MainPage : UserControl
{
public MainPage()
{
InitializeComponent();
}
System.Net.Sockets.Socket socket; private void button1_Click(object sender, RoutedEventArgs e)
{
byte[] userbytes = Encoding.UTF8.GetBytes(this.tbInput.Text);
socket = new System.Net.Sockets.Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
SocketAsyncEventArgs socketArgs = new SocketAsyncEventArgs();
socketArgs.RemoteEndPoint = new DnsEndPoint("127.0.0.1", );
//将需要发送的内容转为byte[],保存到UserToken属性中
socketArgs.UserToken = userbytes;
socketArgs.Completed += new EventHandler<SocketAsyncEventArgs>(socketArgs_Completed);
//客户端步骤一:发起服务器连接请求。
socket.ConnectAsync(socketArgs);
}
//每发生一个Socket操作都讲激活此方法,操作包括(Connect/Send/Receive/None)
void socketArgs_Completed(object sender, SocketAsyncEventArgs e)
{
if (e.LastOperation == SocketAsyncOperation.Connect)
{
//客户端步骤二:连接服务器成功,将需要发送的数据放入缓冲区中,然后异步向服务器发送消息请求
byte[] userbytes = (byte[])e.UserToken;
e.SetBuffer(userbytes, , userbytes.Length);
socket.SendAsync(e);
}
else if (e.LastOperation == SocketAsyncOperation.Send)
{
//客户端步骤三:消息发送成功,此时设置一个新的缓冲区实例,并且发起异步接收服务器返回的消息
byte[] userbytes = new byte[];
e.SetBuffer(userbytes, , userbytes.Length);
socket.ReceiveAsync(e);
}
else if (e.LastOperation == SocketAsyncOperation.Receive)
{
//客户端步骤四:获取到服务器返回的消息,关闭Socket
string RecevieStr = Encoding.UTF8.GetString(e.Buffer, , e.Buffer.Length).Replace("\0", "");
//因为是异步Socket请求,所以需要使用UI线程更新lbShowMessage的显示效果
this.lbShowMessage.Dispatcher.BeginInvoke(new DoThingDele(DoThing), RecevieStr);
socket.Close();
}
}
//更新UI
public void DoThing(string arg)
{
this.lbShowMessage.Content = this.lbShowMessage.Content + "->" + arg;
}
//声明的一个DoThing方法委托
public delegate void DoThingDele(string arg);
}

  客户端Xaml前台代码如下:

    <Grid x:Name="LayoutRoot" Background="White" ShowGridLines="True">
<TextBox Height="" HorizontalAlignment="Left" Margin="20,20,0,0"
Name="tbInput" VerticalAlignment="Top" Width="" />
<Button Content="发 送" Height="" HorizontalAlignment="Left"
Margin="279,20,0,0" Name="button1" VerticalAlignment="Top"
Width="" Click="button1_Click" />
<sdk:Label Height="" HorizontalAlignment="Left" Margin="20,57,0,0"
Name="lbShowMessage" VerticalAlignment="Top" Width="" />
</Grid>

  最后效果如下,如需源码请点击 SLSocket.zip 下载,本文演示的是最简单通讯效果:

Silverlight的Socket通信的更多相关文章

  1. 使用Socket通信实现Silverlight客户端实时数据的获取(模拟GPS数据,地图实时位置)

    原文:使用Socket通信实现Silverlight客户端实时数据的获取(模拟GPS数据,地图实时位置) 在上一篇中说到了Silverlight下的Socket通信,在最后的时候说到本篇将会结合地图. ...

  2. 我看不下去鸟。。。。Java和C#的socket通信真的简单吗?

    这几天在博客园上看到好几个写Java和C#的socket通信的帖子.但是都为指出其中关键点. C# socket通信组件有很多,在vs 使用nuget搜索socket组件有很多类似的.本人使用的是自己 ...

  3. php简单实现socket通信

    socket通信的原理在这里就不说了,它的用途还是比较广泛的,我们可以使用socket来做一个API接口出来,也可以使用socket来实现两个程序之间的通信,我们来研究一下在php里面如何实现sock ...

  4. Socket通信类

    package com.imooc; import java.io.BufferedReader; import java.io.IOException; import java.io.InputSt ...

  5. AgileEAS.NET SOA 中间件平台.Net Socket通信框架-介绍

    一.前言 AgileEAS.NET SOA 中间件平台是一款基于基于敏捷并行开发思想和Microsoft .Net构件(组件)开发技术而构建的一个快速开发应用平台.用于帮助中小型软件企业建立一条适合市 ...

  6. socket通信

    socket通信 一:socket基于Tcp连接,数据传输有保证 二:socket连接的建立过程: 1:服务器监听 2:客户端发出请求 3:建立连接 4:通信 三:一个简单的例子:服务器端每隔一段时间 ...

  7. Android之Socket通信、List加载更多、Spinner下拉列表

    Android与服务器的通信方式主要有两种,一是Http通信,一是Socket通信.两者的最大差异在于,http连接使用的是“请求—响应方式”,即在请求时建立连接通道,当客户端向服务器发送请求后,服务 ...

  8. .NET开源高性能Socket通信中间件Helios介绍及演示

    一:Helios是什么 Helios是一套高性能的Socket通信中间件,使用C#编写.Helios的开发受到Netty的启发,使用非阻塞的事件驱动模型架构来实现高并发高吞吐量.Helios为我们大大 ...

  9. iOS开发之Socket通信实战--Request请求数据包编码模块

    实际上在iOS很多应用开发中,大部分用的网络通信都是http/https协议,除非有特殊的需求会用到Socket网络协议进行网络数 据传输,这时候在iOS客户端就需要很好的第三方CocoaAsyncS ...

随机推荐

  1. Java抓取网页数据(原来的页面+Javascript返回数据)

    转载请注明出处! 原文链接:http://blog.csdn.net/zgyulongfei/article/details/7909006 有时候因为种种原因,我们须要採集某个站点的数据,但因为不同 ...

  2. Zero Clipboard - 跨浏览器兼容的“复制到剪贴板”功能

    开发中经常会用到复制的功能,在 IE 下实现比较简单,但要想做到跨浏览器比较困难了. 本文将介绍一个跨浏览器的库类 Zero Clipboard ,它利用 Flash 进行复制,所以只要浏览器装有 F ...

  3. 【OpenCV新手教程第14】OpenCVHough变换:霍夫变换线,霍夫变换圆汇编

    本系列文章由@浅墨_毛星云 出品.转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/26977557 作者:毛星云(浅墨) ...

  4. Android获得Manifest在&lt;meta-data&gt;元件的值

    前段时间攻略完成游戏开发项目.其中用于包装散装. 目前市场上的网络不提交.但是,通过设置Manifest中的Meta_data>去获得相关參数,游戏ID号改变.游戏ID改变,然后游戏内容就改变. ...

  5. MongoDB在实际项目

    MongoDB在实际项目中的使用   MongoDB简介 MongoDB是近些年来流行起来的NoSql的代表,和传统数据库最大的区别是支持文档型数据库.当然,现在的一些数据库通过自定义复合类型,可变长 ...

  6. 端口映射工具 redir/socat/xinetd - 运维技术 - 开源中国社区

    端口映射工具 redir/socat/xinetd - 运维技术 - 开源中国社区 端口映射工具 redir/socat/xinetd    10人收藏此文章, 我要收藏 发表于3天前(2013-08 ...

  7. 30天自制操作系统第九天学习笔记(u盘软盘双启动版本)

    暑假学习小日本的那本书:30天自制操作系统 qq交流群:122358078    ,更多学习中的问题.资料,群里分享 environment:开发环境:ubuntu 第九天的课程已学完,确实有点不想写 ...

  8. 【MongoDB】The description of index(一)

    From this blog, we start to talk about the index in mongo Database, which is similar to the traditio ...

  9. hdu5171(矩阵快速幂)

    传送门:GTY's birthday gift 题意:GTY的朋友ZZF的生日要来了,GTY问他的基友送什么礼物比较好,他的一个基友说送一个可重集吧!于是GTY找到了一个可重集S,GTY能使用神犇魔法 ...

  10. wampserver图标黄色

    wampserver图标黄色(多个httpd.exe服务,以前装了apache) 服务--->httpd.exe右击这个服务打开文件位置就知道是不是wampserver的服务.如果不是就停掉这给 ...