2011年12月29日 星期四

C#中如何得到webbrowser里url中的参数

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]);
            
}
        
}
    
}}

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一定要斷開。

Flash 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);
                }

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>

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");

2011年12月28日 星期三

android unable to open sync connection

這是Device資源不足

最後最終解法是
1.重新建立連線,可以利用關閉手機上的[開發]->[USB除錯中]
2.拔開USB線
3.將所有手機中開啟的程式關閉
4.打開[USB除錯中]
5.將USB線接上,一切都OK了