我開發共享軟件的三次經歷(中):我賺到了十萬塊


 

共享軟件這個詞,如今似乎離我們已經越來越遙遠了。還有人記得超級兔子嗎?還有人知道netants嗎?這些輝煌一時的明星,已逐漸消失在人們的視野中。今天已經是免費軟件的世界。互聯網行業的巨頭們,打造的免費模式,給共享軟件敲響了喪鍾。

共享軟件,曾經寄托了多少程序員們創業致富的夢想。我也曾加入共享軟件的大潮中,開發過差不多近十個共享軟件,最后它們大都灰飛煙滅了,但其中三次經歷,還是給我的程序員生涯留下了難以磨滅的記憶。

     本人拙作《程序員第二步-從程序員到項目經理》已經到貨,當當網、京東網、天貓商城均可購買,謝謝各位園友們的長期大力支持!

 

第二篇:淘寶發布大王-我賺到了十萬塊

一、淘寶發布大王的來世今生

我開發的第二款讓我難忘的共享軟件是淘寶發布大王。

這是一款比隱藏專家還要簡單的軟件,這個軟件是針對淘寶賣家的,它的功能很簡單,就是每隔一段時間,就把賣家店里的下架的寶貝自動上架。

這個軟件最先是給我老婆自己用的。她在淘寶上開了一個網店賣銀飾,商品有四五百件。當時淘寶還沒有自動上架功能,賣家的商品在一個周期內(好像是7天)沒有賣出去,就會自動下架。你要想再上架重新賣,必須要手動操作,找到沒有賣出的寶貝,選中它,然后點擊上架。四五百件商品,就是說每天要重新上架六七十件,這實在是一件很繁瑣、枯燥的工作。於是淘寶發布大王就應運而生了。

 

我們自己用了之后,覺得確實很方便,再也不用每過一段時間就要跑到電腦前面上架寶貝了,軟件開在那里,基本上什么不用管,比以前省事多了。后來我們想,既然有用,別的賣家肯定也需要,於是我們把軟件掛出來賣,70塊錢一台機(綁定網卡),沒想到反響不錯,沒過幾天,賣軟件的銷售利潤就比老婆賣銀飾賺的還要多。

當我們賣這款軟件時,市面上根本沒有競爭對手,只此一家,別無分店。可是一個多月后,出現了許多模仿者,它們中一些,在銷量上可能還超過了淘寶發布大王。即使如此,淘寶發布大王的銷量也還是可以的,差不多每天能賣十來個授權,這對於當時的我來說,實在是一筆不菲的收入。大概是由於用的人越來越多,引起了淘寶網的注意,他們還曾派人電話采訪了我,說要寫一篇采訪稿,記錄淘寶網二次開發人員的創業情況,可惜的是,我一直沒有見到那篇文章。

更可惜的是,好景不長。這個軟件還沒賣上一年,淘寶網就推出了寶貝自動上架功能,淘寶發布大王再也沒有用開之地了,它自然的消失,我的致富夢也戛然而止。

最后統計了一下,這個軟件賣了超過十萬元。說起來不多,但對於當時拿着幾千元月薪的我來說,已經是一筆不小的數字了。靠着這筆錢,我終於擁有了屬於自己的房子,開始了幸福的房奴生活。幾年后,廣州房價飆升,現在再次回想起來,可以說淘寶發布大王從一定程度上改變了我的人生軌跡。

 

二.關鍵技術

下面談一談技術吧。

    1.運行過程

淘寶發布大王基於.net 1.1開發,在技術上並沒有什么特別的難度,其核心過程有三步:

(1)采用HttpWebRequest類,將用戶名、密碼等信息構造成post數據,發送過淘寶網登錄頁面。收到返回信息后,記錄下cookie。通過攜帶cookie信息,保持HttpWebRequest的登錄狀態。

(2)HttpWebRequest再get待上架寶貝頁面,解析頁面html,獲得的寶貝ID集合。

(3)將寶貝ID列表、上架操作指令構造成post數據,發送到待上架寶貝頁面,上架成功。

可見,最核心的就是采用HttpWebRequest類來與服務器交互,代碼如下:

 

  private  static  bool  PostData ( string  url, string  postData, ref  string  result)
  {
             try
            {

                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
                request.CookieContainer = m_CookieContainer; 
                request.Method =  " POST ";
                request.ContentType= " application/x-www-form-urlencoded ";
                
                 byte[]  byte1=Encoding.Default.GetBytes(postData); // 最終編碼后要上傳的數據
                request.Timeout =  20000;
                request.ContentLength = postData.Length;
                Stream writeStream = request.GetRequestStream();
                writeStream.Write(byte1, 0,postData.Length);
                writeStream.Close();

                HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 
                
                 if (response.StatusCode == HttpStatusCode.OK)
                {
                    Stream stream = response.GetResponseStream(); 
                    StreamReader reader =  new StreamReader(stream,System.Text.Encoding.Default);             
                    result = reader.ReadToEnd(); 
                    stream.Close(); 
                    reader.Close(); 
                    response.Close();    
                }
                 else
                {
                    result =  "";
                     return  false;
                }                
                 return  true;
            }            
             catch(Exception ex)
            {
                WriteLog(ex.Message);
                 return  false;
            }
            
        }

 

 

    2.軟件注冊算法

淘寶發布大王在授權方面使用了非對稱加密算法,私鑰用於生成注冊碼,只在我自己的電腦上運行;公鑰用於驗證注冊碼,在用戶的電腦上運行。

注冊碼驗證采用RSACryptoServiceProvider類提供的VerifyData方法即可,代碼如下。

        public  static  bool  Verify( byte []digestInput,  byte [] signed)
{
           try
          {
              RSACryptoServiceProvider RSAalg =  new RSACryptoServiceProvider();
              RSAalg.ImportParameters(GetParam());
               return RSAalg.VerifyData(digestInput,  typeof(SHA1CryptoServiceProvider),signed);
          }
           catch
          {
               return  false;
          }
       }
 
        private  static RSAParameters GetParam()
       {
           // 用公鑰驗證
          RSAParameters param =  new RSAParameters();
          param.Exponent = Convert.FromBase64String( " AQAB ");
          param.Modulus = Convert.FromBase64String( " 55/Jb2IaIoEkgiDHWaHVRnsLivGYtNO/N6I+2P9qh12cm5vvZFk0/7EpuT1PiqruquJ/jbrp3dDDHZeT9xVi1uQ2HQDEcPBnX6FWowTqBHFHG9O00wLy3pCfmKpIRqD4ZRRKhcdtVnKndSTjp6Qrv5vbxWX6+mO9Mz6qF6k+JDc= ");
           return param; 
       }

 采用非對稱加密算法的好處就是,即使你破解了我的軟件,拿到公鑰,你也沒辦法生成注冊碼,從而比較好的保證軟件的安全性。

    3.網卡真實的物理地址獲取

網卡macid可以通過.net提供的WMI類庫來實現,然而它獲取的網卡地址只是寫在注冊表中的地址。這種地址是可以通過軟件工具修改的。如果用戶通過第三方軟件修改了mac地址,WMI就是無法獲取真實的網卡地址了。

那有什么辦法可以獲取網卡的真實的特理地址呢?有,那就要用到Windows API函數DeviceIoControl了,代碼如下:

     private  static  string GetPhysicalAddr( string cardId) {
       string macAddress =  string.Empty;
       uint device =  0;
       try {
         string driveName =  " \\\\.\\ " + cardId;
        device = Win32Utils.CreateFile( driveName,
                                 Win32Utils.GENERIC_READ | Win32Utils.GENERIC_WRITE,
                                 Win32Utils.FILE_SHARE_READ | Win32Utils.FILE_SHARE_WRITE,
                                  0, Win32Utils.OPEN_EXISTING,  00 );
         if (device != Win32Utils.INVALID_HANDLE_VALUE) {
           byte[] outBuff =  new  byte[ 6];
           uint bytRv =  0;
           int intBuff = Win32Utils.PERMANENT_ADDRESS;
 
           if ( 0 != Win32Utils.DeviceIoControl( device, Win32Utils.IOCTL_NDIS_QUERY_GLOBAL_STATS,
                               ref intBuff,  4, outBuff,  6ref bytRv,  0 )) {
             string temp =  string.Empty;
             foreach ( byte b  in outBuff) {
              temp = Convert.ToString( b,  16 ).PadLeft(  2' 0 ' );
              macAddress += temp;
              temp =  string.Empty;
            }
          }
        }
      }  finally {
         if (device !=  0) {
          Win32Utils.CloseHandle( device );
        }
      }
 
       return macAddress;
    }

 

三.總結

淘寶發布大王雖然生命周期很短,但基本上還算是一個成功的軟件(起碼算不上失敗吧)。能把自己的軟件賣出去,這是一個很爽的過程,從中獲得的快感不是用金錢能衡量的,通過開發淘寶發布大王,我收獲了一些物質財富,更重要的是獲得了快樂。

在開發共享軟件方面,有兩點也許值得思考:

一是如果從自己熟悉的、甚至自己直接需要的東西入手,也許更容易成功;

二是共享軟件不在於功能有多強大,而在於多大程度上滿足用戶的實際需求。

      與各位共勉!

  ---------------------------------

        本人拙作《程序員第二步--從程序員到項目經理》已經到貨,謝謝各位園友的長期支持!

        當當網:http://product.dangdang.com/23365823.html 

        京東網:http://item.jd.com/11350488.html       

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM