一个已经完成的访问量统计项目,发上来记录一下,服务端和客户端都使用C#编写
服务端代码:
using System; using System.Data; using System.Configuration; using System.Collections; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using System.Data.SqlClient; public partial class phprpc : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { org.phprpc.PHPRPC_Server server = new org.phprpc.PHPRPC_Server(); server.Add(new string[] { "add", "sub", "getRv","getType","getPv","getUv" }, new Phpox()); server.Add("hello", typeof(Phpox)); server.Start(); } } public class Phpox { SqlConnection conn; public Phpox() { conn = new SqlConnection(@"Server=(local);User=sa;PWD=00;Database=channelCount"); conn.Open(); } public ArrayList getType() { string sql = "select type from [view] group by type"; SqlCommand comm = conn.CreateCommand(); comm.CommandText = sql; SqlDataReader reader = comm.ExecuteReader(); ArrayList al = new ArrayList(); while (reader.Read()) { al.Add(reader["type"]); } reader.Close(); conn.Close(); return al; } public int getPv(string type) { string sql = "select count(*) AS num from [view] where type = '"+type+"'"; SqlCommand comm = conn.CreateCommand(); comm.CommandText = sql; SqlDataReader reader = comm.ExecuteReader(); reader.Read(); int num = Convert.ToInt32(reader["num"]); reader.Close(); conn.Close(); return num; } public int getUv(string type) { string sql = "select count(DISTINCT ip) AS num from [view] where type = '" + type + "'"; SqlCommand comm = conn.CreateCommand(); comm.CommandText = sql; SqlDataReader reader = comm.ExecuteReader(); reader.Read(); int num = Convert.ToInt32(reader["num"]); reader.Close(); conn.Close(); return num; } public ArrayList getRv(string type) { string sql = "select ip,count(*) AS num from [view] where type = '" + type + "' group by ip order by num desc"; SqlCommand comm = conn.CreateCommand(); comm.CommandText = sql; SqlDataReader reader = comm.ExecuteReader(); ArrayList al = new ArrayList(); ArrayList al1 = new ArrayList(); int i = 0; while (reader.Read()) { Hashtable ht = new Hashtable(); int num = Convert.ToInt32(reader["num"]); string ip = Convert.ToString(reader["ip"]); if (num > 1) { i++; } ht.Add("ip", ip); ht.Add("num",num); al1.Add(ht); } al.Add(i); al.Add(al1); reader.Close(); conn.Close(); return al; } public double add(double a, double b) { return a + b; } public string add(string a, string b) { return a + b; } public int sub(int a, int b) { return a - b; } public int inc(ref int n) { return n++; } public static string hello(string name, System.IO.TextWriter output) { string result = String.Concat("hello ", name); output.Write("output: " + result); return result; } }
客户端代码:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using org.phprpc; using org.phprpc.util; using System.Collections; namespace channelCount { public interface Phpox { double add(double a, double b); string add(string a, string b); int sub(int a, int b); Decimal inc(ref String n); string hello(string name); ArrayList getType(); int getPv(string type); int getUv(string type); ArrayList getRv(string type); } public partial class Form1 : Form { PHPRPC_Client rpc; Phpox p; public Form1() { InitializeComponent(); rpc = new PHPRPC_Client("http://www.xxxx.cn/channelCount/ssss.aspx"); p = (Phpox)rpc.UseService(typeof(Phpox)); } private void Form1_Load(object sender, EventArgs e) { ArrayList ht = (ArrayList)p.getType(); foreach (byte[] de in ht) { string str = System.Text.Encoding.Default.GetString(de); comboBox1.Items.Add(str); } } private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) { string type = comboBox1.SelectedItem.ToString(); int num = (int)p.getPv(type); lblPv.Text = num.ToString(); //int uv = (int)p.getUv(type); //lblUv.Text = uv.ToString(); ArrayList rv = (ArrayList)p.getRv(type); lblRv.Text = rv[0].ToString(); lblUv.Text = rv[2].ToString(); //lblPv.Text = rv[3].ToString(); ArrayList row = PHPConvert.ToArrayList(rv[1]); listView1.Items.Clear(); for(int i=0;i<row.Count;i++) { Hashtable ht = PHPConvert.ToHashtable(row[i]); string ip = System.Text.Encoding.Default.GetString((byte[])ht["ip"]); int num1 = (int)ht["num"]; listView1.Items.Add(ip); listView1.Items[i].SubItems.Add(num1.ToString()); } } } }