preload preload preload preload

有偿承接各类软件、网站等开发业务


6th 四月 2011 心情札记 4 Comments

有偿承接备类工具、软件、网站等开发业务

本人有偿承接各类工具、软件、网站等开发业务,有开发需求的朋友,请在跟帖留言或给我发邮件(me#jailu.cn,请把#替换成@),本人将在第一时间与你取得联系。

附:部分本人公开发布的作品(开心网辅助工具系列):

1. 开心庄园辅助工具:开心庄主 Build 20110121(首发日期:2010年8月9日)
下载地址:http://bbs.snsfun.com/thread-157157-1-1.html

2. 花园牧场辅助工具:开心农夫 Build 20110121(首发日期:2009年3月3日)
下载地址:http://bbs.snsfun.com/thread-157159-1-1.html

3. X世界辅助工具:X-Man Build 20110121(首发日期:2010年5月17日)
下载地址:http://bbs.snsfun.com/thread-157158-1-1.html

4. 开心餐厅辅助工具:开心厨师 Build 20110121(首发日期:2010年2月23日)
下载地址:http://bbs.snsfun.com/thread-157160-1-1.html

5. 争车位辅助工具:开心车夫 Build 20110121(首发日期:2008年12月23日)
下载地址:http://bbs.snsfun.com/thread-157161-1-1.html

6. 小小战争辅助工具:小小领主 Build 20110126(首发日期:2011年1月20日)
下载地址:http://bbs.snsfun.com/thread-157081-1-1.html

7. 掏鸟窝辅助工具:开心神掏 Build 20110125(首发日期:2011年1月24日)
下载地址:http://bbs.snsfun.com/thread-157403-1-1.html

Read More »

开心网(kaixin001.com)辅助工具导航


6th 四月 2011 原创工具 0 Comments

1. 花园牧场辅助工具 — 开心农夫
点击进入下载页面

2. 开心餐厅辅助工具 — 开心厨师
点击进入下载页面

3. X世界辅助工具 — X-Man
点击进入下载页面

4. 争车位辅助工具 — 开心车夫
点击进入下载页面

5. 开心庄园辅助工具 — 开心庄主
点击进入下载页面

6. 超级大享实时物价表(Web版)
点击进入

点击进入开心网系列辅助工具唯一指定交流论坛–乐趣论坛

Read More »

如何购买《开心城管》注册码?


20th 六月 2011 原创工具 4 Comments

注册《开心城管》后,有什么好处?

1. 优先体验VIP功能

1.1 自动使用体力

1.2 在线卖货

1.3 “自定义执行顺序”:可在“帐号设置”面板中设置

1.4 “启动后自运行”功能:可在“全局设置”面板中设置

1.5 更多实用功能陆续添加中。

2. 添加更多的帐号:最多可达100个

3. 去除界面广告

如何购买《开心城管》注册码?

通过电子邮件(city@jailu.cn)或业务QQ(2457017898)与我们取得联系。

有什么问题,马上和我联系

邮件标题:开心城管注册码

邮件正文:随意(如果你拥有乐趣论坛帐号的话,请附上你的论坛帐号,可享受不同程度的优惠。一个SNSFun帐号,最多购买2个注册码!)

购买费用及购买方法:
《开心城管》注册码目前支持以下两种购买方式(具体的支付帐号,请通过电子邮箱(city@jailu.cn)或业务QQ(2457017898)与我们联系):

1. 支付宝

2. 财付通

3. 没有支付宝和财付通的朋友,请通过电子邮件(city@jailu.cn)或业务QQ(2457017898)共同商讨可行的支付方式

《开心城管》注册码费用:30元/个。

SNSFun会员优惠(每个SNSFun可购买两个注册码):30 * (100% – 优惠额度%) = 最终价格

其它优惠:一次性购买两个或两个以上的注册码,可再享受9折优惠(该优惠已于2011年6月26日结束)。

请直接通过以上两种方式付款给我,付款时请附上你的机器码及SNSFun帐号(有的话)。

付款完功后,请再次通过电子邮件(city@jailu.cn)或业务QQ(2457017898)向我们索要注册码。

附 SNSFun会员优惠政策:

奴隶 0%
短工 0%
长工 5%
佃户 10%
贫农 15%
中农 20%
富农 25%
地主 30%
诸侯 35%

购买示例:

支付宝

财付通

Read More »

Jailu.Net.HttpHelper:网络请求类(新版)


27th 五月 2011 技术文章 0 Comments

最近,本人开发的小工具《开心城管》出了点问题,具体表现为:切换用户时,网络请求超时。一开始还以为是开心网做了什么限制,导致请求超时,后来利用Http Anylyzer发现,出现超时错误时,请求根本就没有发出。奇怪的问题,这到底是什么问题造成的呢?仔细检查了相关代码,没有什么发现,求助于搜索引擎后,找到了问题所在:HttpWebRequest在GetResponse之后,没有调用WebResponse.Close关掉请求。默认情况下,System.Net 对每个主机的每个应用程序使用两个连接,连接数超过两个时,就会出现请求超时的问题。通过设置应用程序的 ServicePoint 中的 ConnectionLimit 属性可增加最大连接数。设置 ServicePointManager.DefaultPersistentConnectionLimit 属性可增加连接数的默认值。

找到问题所在后,就是修改代码了。修改代码之前,准备参考一下其它人HttpHelper的写法,于是百度了一下,发现目前网上最流行的HttpHelper(http://win.51aspx.com/CV/QQWinFarm,HttpHelper.cs.html)居然是本人在两年多前编写的,只是作了些许不同的修改。虽然这两年,本人对HttpHelper作了不少修改,但总觉得不是太完美,于是重写了下,修复本文开头描述的Bug的同时,让HttpHelper更加灵活。下面是今天重写后的HttpHelper:

/*
 * Copyright (c) 2011 Jailu (Mr.Jailu@gmail.com)
 * Dual licensed under GPL V3 licenses.
 */

using System;
using System.Collections.Generic;
using System.Drawing;
using System.IO;
using System.Net;
using System.Text;

namespace Jailu.Net
{
    public class HttpHelper
    {
        private CookieContainer _CookieContainer;
        public CookieContainer CookieContainer
        {
            get
            {
                return _CookieContainer;
            }
            set
            {
                _CookieContainer = value;
            }
        }

        private string _ContentType = "application/x-www-form-urlencoded; charset=UTF-8";
        public string ContentType
        {
            get
            {
                return _ContentType;
            }
            set
            {
                _ContentType = value;
            }

        }

        private string _Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
        public string Accept
        {
            get
            {
                return _Accept;
            }
            set
            {
                _Accept = value;
            }
        }

        private string _UserAgent = "Mozilla/5.0 (Windows NT 6.1; rv:2.0) Gecko/20100101 Firefox/4.0";
        public string UserAgent
        {
            get
            {
                return _UserAgent;
            }
            set
            {
                _UserAgent = value;
            }
        }

        private Encoding _Encoding = Encoding.GetEncoding("utf-8");
        public Encoding Encoding
        {
            get
            {
                return _Encoding;
            }
            set
            {
                _Encoding = value;
            }
        }

        private int? _RequestTimeOut;
        public int? RequestTimeOut
        {
            get
            {
                return _RequestTimeOut;
            }
            set
            {
                _RequestTimeOut = value;
            }
        }

        private IWebProxy _WebProxy;
        public IWebProxy WebProxy
        {
            get
            {
                return _WebProxy;
            }
            set
            {
                _WebProxy = value;
            }
        }

        public HttpHelper()
        {
            _CookieContainer = new CookieContainer();
        }

        public HttpHelper(CookieContainer cookieContainer)
        {
            _CookieContainer = cookieContainer;
        }

        public string DoRequest(string url, string postData = null, HttpRequestMethod requestMethod = HttpRequestMethod.Get, CookieContainer cookieContainer = null, Encoding encoding = null, Action<HttpWebRequest> resetHttpWebRequest = null)
        {
            var stream = this.DoRequestAsStream(url, postData, requestMethod, cookieContainer, encoding, resetHttpWebRequest);

            var streamReader = new StreamReader(stream, encoding ?? this.Encoding);

            var result = streamReader.ReadToEnd();

            streamReader.Close();
            stream.Close();

            return result;
        }

        public Bitmap DoRequestAsBitmap(string url, string postData = null, HttpRequestMethod requestMethod = HttpRequestMethod.Get, CookieContainer cookieContainer = null, Encoding encoding = null, Action<HttpWebRequest> resetHttpWebRequest = null)
        {
            var stream = this.DoRequestAsStream(url, postData, requestMethod, cookieContainer, encoding, resetHttpWebRequest);

            return new Bitmap(stream);
        }

        public MemoryStream DoRequestAsStream(string url, string postData = null, HttpRequestMethod requestMethod = HttpRequestMethod.Get, CookieContainer cookieContainer = null, Encoding encoding = null, Action<HttpWebRequest> resetHttpWebRequest = null)
        {
            HttpWebRequest httpWebRequest = (HttpWebRequest)HttpWebRequest.Create(url);
            httpWebRequest.CookieContainer = cookieContainer ?? this.CookieContainer;
            httpWebRequest.ContentType = this.ContentType;
            httpWebRequest.Accept = this.Accept;
            httpWebRequest.UserAgent = this.UserAgent;

            if (this.RequestTimeOut.HasValue)
            {
                httpWebRequest.Timeout = this.RequestTimeOut.Value;
            }

            if (this.WebProxy != null)
            {
                httpWebRequest.Proxy = this.WebProxy;
            }

            if (resetHttpWebRequest != null)
            {
                resetHttpWebRequest(httpWebRequest);
            }

            HttpWebResponse httpWebResponse;
            if (requestMethod == HttpRequestMethod.Post)
            {
                httpWebRequest.Method = "POST";

                byte[] postBytes = (encoding ?? this.Encoding).GetBytes(postData ?? string.Empty);
                httpWebRequest.ContentLength = postBytes.Length;

                Stream stream = httpWebRequest.GetRequestStream();
                stream.Write(postBytes, 0, postBytes.Length);
                stream.Close();
            }
            else
            {
                httpWebRequest.Method = "GET";
            }

            httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse();
            Stream responseStream = httpWebResponse.GetResponseStream();

            MemoryStream memoryStream = new MemoryStream();

            const int bufferLength = 1024;

            int actual;
            byte[] buffer = new byte[bufferLength];
            while ((actual = responseStream.Read(buffer, 0, bufferLength)) > 0)
            {
                memoryStream.Write(buffer, 0, actual);
            }

            memoryStream.Position = 0;

            responseStream.Close();
            httpWebResponse.Close();

            return memoryStream;
        }
    }

    public enum HttpRequestMethod
    {
        Get = 0,
        Post = 1,
    }
}

调用方法:

1. Get请求

var result = new HttpHelper().DoRequest("http://www.domain.com");

2. Post请求

var result = new HttpHelper().DoRequest(
    "http://www.domain.com/login.aspx",
    "username=jailu&password=123",
    HttpRequestMethod.Post
);

3. 高级用法

var result = new HttpHelper().DoRequest(
    "http://www.domain.com/login.aspx",
    "username=jailu&password=123",
    HttpRequestMethod.Post,
    new CookieContainer(),
    Encoding.GetEncoding("gb2312"),
    (request) =>
    {
        request.AllowAutoRedirect = false;
        request.Headers.Add("Accept-Encoding", "gzip, deflate");
    }
);

点击下载HttpHelper源码

Read More »

《开心庄主》MD5校验专帖


12th 四月 2011 心情札记 1 Comment

如何查看文件的MD5码?

如果你下载的文件,MD5码与本帖不同,说明你下载的文件不是Jailu发布的,已被他人动过手脚,可能对你的电脑带来风险,请勿使用!

开心庄主 Build 20110412
Villa_Build_20110412.zip
MD5: 189F587A3A50AFD0A4619E79C38F2508
SHA1: E86938432E75B6673D22DA727DC379B07A708B0B
CRC32: 0999E7A6

开心庄主.exe
MD5: 788D64644FC2AAE1BB4607ED272DEA3A
SHA1: 3AE5F1DA388AACAEAE9E60C529FBB831DCD5B373
CRC32: 11796078
更多…

 

Read More »

如何查看文件的MD5码?


9th 四月 2011 心情札记 0 Comments

可用于查看文件MD5码的工具很多,本文以Hash 1.04为例,向大家简单介绍如何查看文件的MD5码。点击下载Hash 1.04

Hash是一款小巧好用的哈希计算器,也是一款md5校验工具。支持文件拖放,速度很快,可以计算文件的 MD5、SHA1、CRC32 的值。

Hash md5校验工具在论坛上、软件发布时经常用,是为了保证文件的正确性,防止一些人盗用程序,加些木马或者篡改版权,设计的一套验证系统。每个文件都可以用Hash MD5验证程序算出一个固定的MD5码来。软件作者往往会事先计算出他的程序的MD5码并帖在网上。因此,在网上看到某个程序下载旁注明了 MD5 码时,可以把它记下来,下载了这个程序后用Hash验证程序计算你所下载的文件的MD5码,和你之前记下MD5码比较,就知道你下的是不是原版了,如果两者相同,那么你所下载的是原版。如果计算出来的和网上注明的不匹配,那么你下载的这个文件不完整,或是被别人动过手脚。

使用方法就是:打开Hash md5校验工具,把你下载的东西拖进Hash窗口,会自动得出你这个文件的MD5码,如果和你下载的里的那个 MD5码不同就说明被动过手脚,反之则说明是没问题的。

Read More »

《开心城管》MD5校验专帖


9th 四月 2011 原创工具 0 Comments

如何查看文件的MD5码?

如果你下载的文件,MD5码与本帖不同,说明你下载的文件不是Jailu发布的,已被他人动过手脚,可能对你的电脑带来风险,请勿使用!

开心城管 Build 20110620
City_Build_20110620.zip
MD5: 5C2D0BDDAD48E3D62BC0E3EACC015FBB
SHA1: EA2FC3A8B779C24BF514A533CEFB0823CDC1B812
CRC32: 4EF55B45

开心城管 Build 20110617
City_Build_20110617.zip
MD5: 09291BA7EED305A6F07BA2D706E65087
SHA1: 6E00F5D4C80C33ADC6C15D5961E2888A1574BA6B
CRC32: 99B39406

开心城管 Build 20110527
City_Build_20110527.zip
MD5: B62FA0AE752528BB76CBFACE2ADD826E
SHA1: AC883D8F5622F8CD5004FDF117B89BF87923BAC7
CRC32: 7C0DEF57

开心城管 Build 20110525
City_Build_20110525.zip
MD5: 767F124AE5137DFC10DACD944A9D2333
SHA1: 274B22CEE709480FDB6413701608A2FA060B5A1C
CRC32: 87F31C35

开心城管 Build 20110523
City_Build_20110523.zip
MD5: C65543B33A6FE760FFA08677B493C5C6
SHA1: FDE26C282F60130BC32CE903A04DC0C3B3B253A4
CRC32: 9839E21E

开心城管.exe
MD5: 772FC5F993120A159735FFB762E6A5C2
SHA1: BC6A146A8CAA2F46543F75A1C1BF3423235D34D7
CRC32: 94650DAA

 

开心城管 Build 20110522
City_Build_20110522.zip
MD5: 010BB74471EDB8ECFD4D26215611BC16
SHA1: 2495AA8C666E2F04AE33051D7BD7A3D67DCBAB3E
CRC32: BA7FDED7

开心城管.exe
MD5: 9D3E28E1F243E650A00D709DC48D6C19
SHA1: F8B0B5F74CEAD2C422ED6F80046F6A1ABB62E70A
CRC32: 6FB36C22

 

开心城管 Build 20110517
City_Build_20110517.zip
MD5: 111725B01ED3A24922719D745083D47D
SHA1: 9BC09AAB12F7CC6D7693162AA78131533DA2FB68
CRC32: BC5CD150

开心城管.exe
MD5: 92DD438D1FD1C48F97119E5EE6F4D2EC
SHA1: EA7E053289BA1FFFA7C3A6F4439F61E7B777CC70
CRC32: E16BCB02

 

开心城管 Build 20110510
City_Build_20110510.zip
MD5: A854805A68EB7B3AC4BB60AE863ED6AD
SHA1: 056FAC604DD9A7B9F1F80ACEA18565F15875988A
CRC32: 586FB5A5

开心城管.exe
MD5: 890C6DDB8AB4F3AA925FEFDC5D6648E4
SHA1: C387B113437FF82302BCCC398A285D722659CBE7
CRC32: D22E7897
更多…

 

开心城管 Build 20110425
City_Build_20110425.zip
MD5: 2E45A07222536185E91FA54223871E7E
SHA1: 9B703EF6B6888BFE647A2524FB0970F59CF6AF89
CRC32: 52F55D93

开心城管.exe
MD5: 8FE9199B5985075B6770515F287692A5
SHA1: 02BCCD247E6E7B7FC795CCF1534101C91EF25283
CRC32: 21E43DDE
更多…

 

开心城管 Build 20110418
City_Build_20110418.zip
MD5: EF8C1E288BC6416BB821B88F148B8293
SHA1: EA5B384517098BD9EF6969D9F9003E640FF22BA2
CRC32: 1D00E0ED

开心城管.exe
MD5: 56E2DCF1BCC05AC41935D2D273516F83
SHA1: 8E69554D844ED586CAB63742657488A9A73C00B4
CRC32: D5AD02C2
更多…

 

开心城管 Build 20110414
City_Build_20110414.zip
MD5: 845DA152B98BD9FDCEE718970292C93A
SHA1: 1D1648B9E332807FAE418C301D75B60D46FC12F2
CRC32: EA25B853

开心城管.exe
MD5: ABEA0AD538A3C578815ABB7C7750C959
SHA1: DEFEB14302D36070B99BE6F942BA75C94AA84C77
CRC32: 176101FD
更多…

 

开心城管 Build 20110412
City_Build_20110412.zip
MD5: CD76805C38662DD1F3BE4DCFC516FC23
SHA1: A2BB9A60EEC7FF563CA76C8F5C8BF48E50B54F68
CRC32: 5694B161

开心城管.exe
MD5: 9315AA5F937570BAD5BB3A408D4A355A
SHA1: 0ACA2EBD22C5F04EFA61E9529639A3305ADD6108
CRC32: 0EC6BAF7
更多…

 

开心城管 Build 20110410
City_Build_20110410.zip
MD5: C894886856038000B1AA9FB2CAFB9A14
SHA1: 40484097489ED23326FC7E8BC00409B0C3804E42
CRC32: CC590A09

开心城管.exe
MD5: 7A0F4B80CA1F9C61B12B8B83C56AB548
SHA1: CAED35F1FE0A72459DB19BB8D81CD8FFA458AE88
CRC32: D61E5524
更多…

 

开心城管 Build 20110409
City_Build_20110409.zip
MD5: E0D7E7F9B16AE937F542D92559BE4C88
SHA1: D9BC32FCB2D81DBCED6323B820CD6199CA8A7AEA
CRC32: 86CD0B59

开心城管.exe
MD5: C6120B51C14970B173208957D5144D11
SHA1: D7C004EC157725823734BC71731B72437D605B65
CRC32: 6C5F6227
更多…

Read More »

jailu.cn正式停用;jailu.me正式启用


4th 四月 2011 心情札记 3 Comments

Jailu.cn,本人的第一个域名,申请至今已有两年,Alexa全球排名最好时排到了5万名,目前排在22万名左右。

做为本人的第一个域名,Jailu.cn深受本人喜欢,虽说这两年来,域名、服务器多次因相关部门的相关政策而关停,本人均都努力使其恢复访问。不为别的,只因为喜欢。但半个月前,Jailu.cn的再次被关停,让我对相关部门再也不抱希望,也放弃了再次争取的机会。经考虑,本人决定:Jailu.cn及其上提供的所有服务无限期关停

2011年3月31日,本人申请了同名域名Jailu.me,并购买了国外服务器,为将来可能提供的服务做好准备。

2011年4月4日,本人在使用WordPress在Jailu.me上搭设了个人博客(http://blog.jailu.me),标致着Jailu.me正式启用。对于以往发布在jailu.cn上的文章,Jailu将视情况,部分转发。

最后,希望http://Jailu.me这个新载名别和Jailu.cn一样:老被关停!

Read More »