using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;
namespace WindowsFormsApplication2{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
webBrowser1.Navigate("http://www.abc.com/news.aspx?class=111111&cid=22222222");
}
private void button1_Click(object sender, EventArgs e)
{
string url = webBrowser1.Url.Query.ToString(); //獲取地址的參數
url = url.Replace("?", ""); //去除第一個參數的問號
string[] urlParam = url.Split('&'); //根據參數間的& 號獲取參數數組
foreach (string s in urlParam)
{
string[] val = s.Split('='); //將參數名與參數值賦值給數組
MessageBox.Show("參數名稱為:" + val[0] + " 參數值為:" + val[1]);
}
}
}}
2011年12月29日 星期四
Flash Socket安全策略 及應對方法
Flash Socket安全策略<policy-file-request/>及應對方法
在Adobe Flash Player 升級到9.0.124 後,由於安全策略更改,原來Socket 或XmlSocket 的應用裡的http 方式加載安全策略的手段不能繼續使用。更改如下:
1, 首先檢測目標服務器的843 端口是否提供安全策略2, 如果1 沒有檢測到策略,則檢測actionscript 是否使用了Security.loadPolicyFile(xmlsocket://)手段提供安全策略,如果還沒檢測到,則使用第3 步檢測3, 檢測目標服務器目標端口是否提供安全策略。
在說具體處理方式前,我先描述一下Flash Player 的驗證過程。在Flex 程序發出Socket 或XmlSocket( 以下統稱為Socket) 請求前, FlashPlayer 會先判斷是否為本地調用,如果不是。即用一個Socket 去鏈接到你的服務端,三次握手成功後一方面發出字符串“ <policy-file-request/>\0 “另一方面監聽返回的安全策略。安全策略接收成功後, FlashPlayer 就斷開驗證的Socket ,然後再運行程序本身的Socket 。在整個SWF 運行期間,無論你請求多少次,只要域相同, FlashPlayer 就只驗證一次。這裡有兩個重點:第一個是驗證的Socket 和程序的Socket 是兩個Socket 。所以你在本地測試時,服務端監聽到N 個Socket 請求,但佈置到服務端后,服務端會監聽到N+1 個請求。第二是驗證的Socket 發送“ <policy-file-request/>\0 “請求和接收你的策略文件是沒有先後關係的,所以你沒必要接收完“ <policy-file-request/>\0 “後才發策略文件。我的做法是只要監聽到請求,就把策略字符串發過去。
在Java中,我處理的方法是獨立啟動一個843端口的服務專門監聽授權請求,這樣客戶端響應速度很快,代碼片段如下:String xml = "<?xml version=\"1.0\"?><cross-domain-policy><site-control permitted-cross-domain-policies=\"all\"/><allow-access-from domain= \"*\" to-ports=\"*\"/></cross-domain-policy>\0";Socket socket=serverSocket.accept();BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream(), "UTF-8"));PrintWriter pw = new PrintWriter(socket.getOutputStream());char[] by = new char[22];br.read(by, 0, 22);String s = new String(by);System.out.println("s="+s);if (s.equals("<policy-file-request/>")) {System.out.println("接收policy-file-request");pw.print(xml);pw.flush();br.close();pw.close();socket.close();}另外,一定要注意xml 字符串後面的”\0” ,因為Flash Player 是用他來做分隔符的,如果你不加上,客戶端驗證socket 可能就一直等待。另外授權接收的socket一定要斷開。
在Adobe Flash Player 升級到9.0.124 後,由於安全策略更改,原來Socket 或XmlSocket 的應用裡的http 方式加載安全策略的手段不能繼續使用。更改如下:
1, 首先檢測目標服務器的843 端口是否提供安全策略2, 如果1 沒有檢測到策略,則檢測actionscript 是否使用了Security.loadPolicyFile(xmlsocket://)手段提供安全策略,如果還沒檢測到,則使用第3 步檢測3, 檢測目標服務器目標端口是否提供安全策略。
在說具體處理方式前,我先描述一下Flash Player 的驗證過程。在Flex 程序發出Socket 或XmlSocket( 以下統稱為Socket) 請求前, FlashPlayer 會先判斷是否為本地調用,如果不是。即用一個Socket 去鏈接到你的服務端,三次握手成功後一方面發出字符串“ <policy-file-request/>\0 “另一方面監聽返回的安全策略。安全策略接收成功後, FlashPlayer 就斷開驗證的Socket ,然後再運行程序本身的Socket 。在整個SWF 運行期間,無論你請求多少次,只要域相同, FlashPlayer 就只驗證一次。這裡有兩個重點:第一個是驗證的Socket 和程序的Socket 是兩個Socket 。所以你在本地測試時,服務端監聽到N 個Socket 請求,但佈置到服務端后,服務端會監聽到N+1 個請求。第二是驗證的Socket 發送“ <policy-file-request/>\0 “請求和接收你的策略文件是沒有先後關係的,所以你沒必要接收完“ <policy-file-request/>\0 “後才發策略文件。我的做法是只要監聽到請求,就把策略字符串發過去。
在Java中,我處理的方法是獨立啟動一個843端口的服務專門監聽授權請求,這樣客戶端響應速度很快,代碼片段如下:String xml = "<?xml version=\"1.0\"?><cross-domain-policy><site-control permitted-cross-domain-policies=\"all\"/><allow-access-from domain= \"*\" to-ports=\"*\"/></cross-domain-policy>\0";Socket socket=serverSocket.accept();BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream(), "UTF-8"));PrintWriter pw = new PrintWriter(socket.getOutputStream());char[] by = new char[22];br.read(by, 0, 22);String s = new String(by);System.out.println("s="+s);if (s.equals("<policy-file-request/>")) {System.out.println("接收policy-file-request");pw.print(xml);pw.flush();br.close();pw.close();socket.close();}另外,一定要注意xml 字符串後面的”\0” ,因為Flash Player 是用他來做分隔符的,如果你不加上,客戶端驗證socket 可能就一直等待。另外授權接收的socket一定要斷開。
c# socket server for flash
string xml = "<?xml version=\"1.0\"?><cross-domain-policy><site-control permitted-cross-domain-policies=\"all\"/><allow-access-from domain=\"*\" to-ports=\"*\"/></cross-domain-policy>\0";
if (msg.IndexOf("<policy-file-request/>") != -1)
{
cb.SendMsg(xml, this.mTcpClient);
}
if (msg.IndexOf("<policy-file-request/>") != -1)
{
cb.SendMsg(xml, this.mTcpClient);
}
Java socket server for flash
package sban.socketServer;
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.InetSocketAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.SocketAddress;
import java.net.URL;
/**
* sban policy server for flex/flash socket
*
* @author sban
*
*/
public class SbanSocketPolicyServer {
public SbanSocketPolicyServer() {
}
public static String readFileAsString(String url)
throws java.io.IOException {
byte[] buffer = new byte[(int) new File(url).length()];
BufferedInputStream f = new BufferedInputStream(
new FileInputStream(url));
f.read(buffer);
f.close();
return new String(buffer);
}
public static void main(String[] args) throws IOException {
ServerSocket server = new ServerSocket();
SocketAddress endpoint = new InetSocketAddress("127.0.0.1", 843);
server.bind(endpoint);
String path = SbanSocketPolicyServer.class.getResource( "crossdomain.xml" ).getPath();
System.out.println(path);
String policy = readFileAsString( path );
while (true) {
System.out.println("wait for client...");
Socket socket = server.accept();
BufferedReader in = new BufferedReader(new InputStreamReader(
socket.getInputStream()));
PrintWriter out = new PrintWriter(socket.getOutputStream());
String s = in.readLine();
System.out.println(s);
if (s.indexOf("policy-file-request") > -1) {
out.print(policy + '\0');
out.flush();
in.close();
out.close();
System.out.println("sended policy context.");
socket.close();
}
}
}
}
crossdomain.xml文件
<cross-domain-policy>
<site-control permitted-cross-domain-policies="all"/>
<allow-access-from domain="*" to-ports="*" />
</cross-domain-policy>
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.InetSocketAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.SocketAddress;
import java.net.URL;
/**
* sban policy server for flex/flash socket
*
* @author sban
*
*/
public class SbanSocketPolicyServer {
public SbanSocketPolicyServer() {
}
public static String readFileAsString(String url)
throws java.io.IOException {
byte[] buffer = new byte[(int) new File(url).length()];
BufferedInputStream f = new BufferedInputStream(
new FileInputStream(url));
f.read(buffer);
f.close();
return new String(buffer);
}
public static void main(String[] args) throws IOException {
ServerSocket server = new ServerSocket();
SocketAddress endpoint = new InetSocketAddress("127.0.0.1", 843);
server.bind(endpoint);
String path = SbanSocketPolicyServer.class.getResource( "crossdomain.xml" ).getPath();
System.out.println(path);
String policy = readFileAsString( path );
while (true) {
System.out.println("wait for client...");
Socket socket = server.accept();
BufferedReader in = new BufferedReader(new InputStreamReader(
socket.getInputStream()));
PrintWriter out = new PrintWriter(socket.getOutputStream());
String s = in.readLine();
System.out.println(s);
if (s.indexOf("policy-file-request") > -1) {
out.print(policy + '\0');
out.flush();
in.close();
out.close();
System.out.println("sended policy context.");
socket.close();
}
}
}
}
crossdomain.xml文件
<cross-domain-policy>
<site-control permitted-cross-domain-policies="all"/>
<allow-access-from domain="*" to-ports="*" />
</cross-domain-policy>
Java int to String(整數轉字串)
Java int to String(整數轉字串)
1. String stringValue = Integer.toString(12345);
2. String stringValue = String.valueOf(12345);
3. String stringValue = new String(""+12345);
Java string to int(字串轉整數)
1. int intValue = Integer.valueOf("12345");
2. int intValue = Integer.parseInt("12345");
1. String stringValue = Integer.toString(12345);
2. String stringValue = String.valueOf(12345);
3. String stringValue = new String(""+12345);
Java string to int(字串轉整數)
1. int intValue = Integer.valueOf("12345");
2. int intValue = Integer.parseInt("12345");
2011年12月28日 星期三
android unable to open sync connection
這是Device資源不足
最後最終解法是
1.重新建立連線,可以利用關閉手機上的[開發]->[USB除錯中]
2.拔開USB線
3.將所有手機中開啟的程式關閉
4.打開[USB除錯中]
5.將USB線接上,一切都OK了
最後最終解法是
1.重新建立連線,可以利用關閉手機上的[開發]->[USB除錯中]
2.拔開USB線
3.將所有手機中開啟的程式關閉
4.打開[USB除錯中]
5.將USB線接上,一切都OK了
訂閱:
文章 (Atom)