Silverlight的Socket通信
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通信的更多相关文章
- 使用Socket通信实现Silverlight客户端实时数据的获取(模拟GPS数据,地图实时位置)
原文:使用Socket通信实现Silverlight客户端实时数据的获取(模拟GPS数据,地图实时位置) 在上一篇中说到了Silverlight下的Socket通信,在最后的时候说到本篇将会结合地图. ...
- 我看不下去鸟。。。。Java和C#的socket通信真的简单吗?
这几天在博客园上看到好几个写Java和C#的socket通信的帖子.但是都为指出其中关键点. C# socket通信组件有很多,在vs 使用nuget搜索socket组件有很多类似的.本人使用的是自己 ...
- php简单实现socket通信
socket通信的原理在这里就不说了,它的用途还是比较广泛的,我们可以使用socket来做一个API接口出来,也可以使用socket来实现两个程序之间的通信,我们来研究一下在php里面如何实现sock ...
- Socket通信类
package com.imooc; import java.io.BufferedReader; import java.io.IOException; import java.io.InputSt ...
- AgileEAS.NET SOA 中间件平台.Net Socket通信框架-介绍
一.前言 AgileEAS.NET SOA 中间件平台是一款基于基于敏捷并行开发思想和Microsoft .Net构件(组件)开发技术而构建的一个快速开发应用平台.用于帮助中小型软件企业建立一条适合市 ...
- socket通信
socket通信 一:socket基于Tcp连接,数据传输有保证 二:socket连接的建立过程: 1:服务器监听 2:客户端发出请求 3:建立连接 4:通信 三:一个简单的例子:服务器端每隔一段时间 ...
- Android之Socket通信、List加载更多、Spinner下拉列表
Android与服务器的通信方式主要有两种,一是Http通信,一是Socket通信.两者的最大差异在于,http连接使用的是“请求—响应方式”,即在请求时建立连接通道,当客户端向服务器发送请求后,服务 ...
- .NET开源高性能Socket通信中间件Helios介绍及演示
一:Helios是什么 Helios是一套高性能的Socket通信中间件,使用C#编写.Helios的开发受到Netty的启发,使用非阻塞的事件驱动模型架构来实现高并发高吞吐量.Helios为我们大大 ...
- iOS开发之Socket通信实战--Request请求数据包编码模块
实际上在iOS很多应用开发中,大部分用的网络通信都是http/https协议,除非有特殊的需求会用到Socket网络协议进行网络数 据传输,这时候在iOS客户端就需要很好的第三方CocoaAsyncS ...
随机推荐
- 玩转Windows服务系列——命令行管理Windows服务
原文:玩转Windows服务系列——命令行管理Windows服务 说到Windows服务的管理就不得不说通过命令行的方式管理Windows服务,因为无论是系统管理员,还是通过编程的方式调用cmd命令, ...
- JavaFX2: 鼠标拖动选择和Ctrl+Shift连续区间选择的ListView
JavaFX2的ListView中的多选没有提供鼠标拖动选择的功能,同时按下Ctrl和Shift后连续的区间选中也不支持,以下代码用于处理这两个问题,细节见代码注释: import com.sun.j ...
- c++windows内核编程笔记day12 硬盘逻辑分区管理、文件管理、内存管理
windows系统磁盘文件存储: 分区格式:NTFS / FAT32 GetSystemDirectory();//获取系统路径 GetWindowsDirectory();//获取windows路径 ...
- ArcSDE当关系查询ArcMap与REST查询结果不一致问题的解决
首先描述来形容什么问题: 周边环境:ArcGIS10.x.Oracle 11g R2,这个问题无关与环境 假设用户使用关联查询(比方一个空间数据与一个属性数据进行关联),在ArcGIS for Des ...
- poj 2038 Team Rankings 枚举排列
//poj 2038 //sep9 #include <iostream> #include <algorithm> using namespace std; char s[1 ...
- Hadoop Hive与Hbase关系 整合
用hbase做数据库,但因为hbase没有类sql查询方式,所以操作和计算数据很不方便,于是整合hive,让hive支撑在hbase数据库层面 的 hql查询.hive也即 做数据仓库 1. 基于Ha ...
- 正则匹配去掉字符串中的html标签
1.得到超链接中的链接地址: string matchString = @"<a[^>]+href=\s*(?:'(?<href>[^']+)'|"&quo ...
- 50 tips of JavaScript
50 tips of JavaScript,这些坑你都知道吗? 1.在局部作用域中,使用var操作符定义的变量将成为定义该变量的作用域中的局部变量,省略var的会创建全局变量:在全局作用域中,不管是否 ...
- SVN模型仓库中的资源从一个地方移动到另一个地方的办法(很久才解决)
弄了很久,想使用domove这个操作,但是都失败了.最后给svnkit的邮箱写了封邮件,他们告诉我这样做就成功了.实际上是使用docopy这个函数实现了move操作.package com.repos ...
- sleep和wait的区别
sleep指线程被调用时,占着CPU不工作,形象地说明为“占着CPU睡觉”,此时,系统的CPU部分资源被占用,其他线程无法进入,会增加时间限制.wait指线程处于进入等待状态,形象地说明为“等待使用C ...