建立Socket Policy服务器
(金庆的专栏)
Flash和Unity3D游戏服务器需要开启一个Socket Policy服务器。
详细说明见:Setting up a socket policy file server
http://www.adobe.com/devnet/flashplayer/articles/socket_policy_files.html
协议如下:
Flash或U3D播放器向Socket Policy服务器发送请求:
“<policy-file-request/>\0”,
服务器返回一个xml文本,其中有包含<cross-domain-policy>配置。
Adobe提供了Perl和Python代码。Unity3D提供了CSharp代码。
cs代码用于Windows. Linux上准备使用Python代码。
在以上网页下载:flashpolicyd_v0.6.zip。
其中有3个版本:init服务,xinetd服务,独立应用。只需一种即可。
按应用的性质,请求量极小,所以最适合应用xinetd.
只需运行其中的install.sh就会安装。
还需手工在/ect/services中添加服务名flashpolicy和端口843.
运行以下指令可以测试一下,输出应该是配置文件的内容。
python -c 'print "<policy-file-request/>%c" % 0' | nc 127.0.0.1 843
其实以上测试指令在尾部多了个'\n', 不是标准的测试。
在in.flashpolicyd.py中多了个strip()去除这个'\n'.
实际用U3D测试时,因为没有'\n'结尾,所以in.flashpolicyd.py无法正常工作。
需要将35行readline()如下更改:
request = sys.stdin.readline().strip()
改为
request = sys.stdin.readline(len('<policy-file-request/>\0')).strip()
这样就不需要eol就可以读取了。
查看其他两个版本的代码没有这个错误,但是有另一个错误,
即有可能只读一半的请求造成判断出错。
还有一个问题是因为服务是由nobody运行的,环境变量不同,
将in.flashpolicyd.py头部的
#!/usr/bin/env python
明确为
#!/usr/local/sbin/python
可避免调用低版本的python而报错。
分享到:
相关推荐
policyServer.py可能是用来处理这种请求的,允许Flash客户端与Python服务器建立连接。 总的来说,这个项目提供了一个学习和实践Socket编程的实战案例,特别适用于那些想要了解如何用Python构建网络服务的开发者。...
标题中的“python多人聊天服务器”指的是使用Python编程语言构建的能够...在实际操作中,可以运行ChatServer.py启动服务器,然后根据聊天程序协议.pdf编写客户端应用,与服务器进行互动,以此加深对Socket编程的理解。
- 当客户端首次尝试与服务器建立 Socket 连接时,Flash Player 会首先发送一个 `policy-file-request` 消息到服务器,请求获取安全策略文件。 - 服务器需要根据这个请求返回一个正确的 `cross-domain.xml` 文件。 ...
当我们需要与Socket服务器建立连接时,可以使用`Socket`或`XMLSocket`类的`connect()`方法。这个方法需要传入服务器的主机名或IP地址以及监听的端口号。连接是异步的,因此需要添加事件监听器来监听`Event.CONNECT`...
在尝试与远程服务器建立Socket连接时,如果不在跨域策略文件(crossdomain.xml)的允许范围内,Flash Player会阻止这种行为,这就是所谓的“安全沙漏问题”。 解决安全沙漏问题通常需要以下步骤: 1. **配置服务器...
当AS3尝试建立Socket连接时,它会先发送一个Policy请求到服务器。服务器需要返回一个包含允许连接的策略的XML文件,如: ```xml <cross-domain-policy> *" to-ports="*" /> </cross-domain-policy> ``` ...
当Flash Player尝试建立Socket连接时,它会发送一个包含目标URL的请求到策略服务器。如果策略服务器允许该连接,它会返回一个包含适当权限的策略文件,Flash Player接收到后才能继续与目标服务器进行Socket通信。 ...
为防止这种情况,Flash Player在尝试建立Socket连接前会发送一个Policy Request到目标服务器,询问是否允许连接。只有当服务器返回一个特定的Policy File响应,Flash Player才会继续执行连接操作。 **二、Policy ...
要与 Socket 服务器建立连接,我们需要调用 `XMLSocket.connect()` 方法,并设置事件监听器来处理网络事件。此方法需要主机 IP 或域名和端口号作为参数。连接过程是异步的,因此需要监听 `onConnect` 事件来判断连接...
若需跨域通信,服务器需要返回特定的Policy文件以允许Silverlight客户端连接。 7. **错误处理与异常** 在Socket通信中,应捕获并处理`SocketException`,这可能是由于网络问题、服务器关闭、超时等原因引起的。...
flash使用socket安全沙箱问题,需要建立安全策略服务器,java完成的一个jar,建立安全策略服务器,需要servlet-api.jar
默认情况下,它会向服务器的843端口发送一个`policy-file-request`请求,等待服务器返回一个安全策略文件。这个文件定义了允许哪些跨域连接。然而,在Firefox和Chrome浏览器中,Flash Player不会遵循此步骤,而是...
这个服务器允许Flash客户端与不同源的服务器建立Socket连接,这是跨域通信的关键。当一个Flash应用试图连接到其他服务器时,它会先向843端口发送请求,以获取允许连接的策略文件。 3. **Linux**: Linux是一种开源...
这个服务器的作用是验证和授权来自不同源的Socket连接请求,尤其是当Flash Player或AIR客户端尝试建立跨域Socket连接时。根据描述,此服务器能够自定义安全策略文件,这些文件定义了哪些源(域名或IP地址)可以与...
客户端会在尝试建立Socket连接前先请求这个政策文件。 4. **使用代理服务** 如果上述方法在某些情况下不可行,如服务器不支持CORS或者无法配置策略文件,开发者可以选择在服务器端设置一个代理服务。这个代理服务...
WebSocket是一种在客户端和服务器之间建立持久连接的协议,它允许双方进行全双工通信,即数据可以在两个方向上同时传输,极大地提高了实时性。在Web应用程序中,WebSocket为需要实时交互的应用提供了强大的支持,...
WebSocket是一种在客户端和服务器之间建立持久连接的网络协议,它为实时数据传输提供了高效、双向通信的能力。在现代Web开发中,WebSocket已经成为实现聊天应用、实时图表、在线游戏等需要实时交互功能的重要技术。...
在本场景中,socket用于在服务器的843端口建立一个服务,接收并处理Flash Player发送过来的策略请求。当Flash Player尝试进行跨域连接时,它会先向目标服务器的843端口发送一个特定的政策请求,等待服务器的响应。...
2. **资源访问控制**:Java对本地文件系统和网络连接进行了严格的控制,例如,Applet默认只能访问其所在服务器的资源,不能随意读写本地文件或与其他服务器建立Socket连接。 3. **代码数字签名**:通过为代码签名,...
在Web应用中,如果使用了XMLSocket,通常需要开放特定的端口,例如843端口,这是Adobe Flash Player用于建立SSL(Secure Socket Layer)连接的默认端口。此端口的开放对于实现跨域通信至关重要,尤其是在进行实时...