[JAVA VC] 短網址生成,HTTP請求,隨想

逸雨清風發表於2013-06-02
關於短網址:
        最近比較流行短網址,所謂短網址,就是通過演算法把長網址轉換成短字元,然後對映到短網址伺服器快取或資料庫裡。當訪問短網址的時候自動從資料庫裡取出對映的原網址。
        這樣一來短網址的好處就凸顯出來,第一是短小好記
,一次對映後就永久固定不變;
        第二就是釋出微博/說說/狀態的時候有字數限制,如果需要釋出一個網址就會佔據一半以上的字元量,轉換成短網址可以剩餘更多字元。或者在文章/貼吧/等等需要防遮蔽或不希望網址太長的地方,使用短網址只需要新增一點額外字元就可以了;
        第三因為通過了對映伺服器,所以可以檢視通過此短網址訪問原網址的PV,UV等資訊,達到統計的目的。一般是在短網址後加特定字元就可以進入後臺管理,例如126.am的‘+’,goo.gl的'qz'(貌似是這個?)  //據說是
網際網路上最穩定、最安全和最快速的網址縮短服務。谷歌的大牛 ( ̄︶ ̄)。
         By the way,貌似淘寶客這種東西的操作模式有點像,通過後臺對映一個自己的淘寶客連結,類似的可以檢視淘寶客連結的成交資訊,從而給淘寶客分成盈利。至於各種美麗說,蘑菇街,返利網神馬的,都是大淘寶客,搭建自己的平臺,掛滿淘寶客連結,他賺十元返你一元你還高興得很,說明賣家賺的更多,可以推測這個東西成本價不知道多低,質量不曉得好差。。。所以淘寶就是個坑!天坑!遠離淘寶,珍愛生命!咳咳。。扯遠了。。雖然我也用淘寶,再打個廣告——我的淘寶店鋪,非淘寶客連結喲親~ ~~~~~ http://rrurl.cn/l7Izvh
        盈所以快去搶注短網址吧~支援自定義~這個很爽誒~定義自己名字生日XXXXXX那啥的~~~~


短網址演算法:
        其實短網址的演算法跟我們倒沒啥關係,因為沒有伺服器搭建算出來也沒用,而且最重要的是這種簽名拉~校驗拉~演算法拉~Hash拉~數學拉什麼的。。。正常人是絕對不會感興趣的。。。。。簡而言之,就是通過MD5演算法生成簽名,然後劃分為4段,再進行位運算,再進行字母表索引得到特定字元,最後會生成4個6位字串,取其中任意一個作為當前短網址。至於重複的問題,首先這個演算法算出來以後重複概率應該不高?(咳咳,其實我也不知道高不高,不過每位有26+26+10應該是重複概率很低咯),如果遇到重複的就取另外的字串嘛,反正先到先得,先對映了的就不用管了。

短網址介面:
             對於開發者來說,只需要呼叫介面獲得短網址伺服器返回的資訊就足夠了。目前國內的很多入口網站基本都開通了短網址的服務。
            騰訊: url.cn
            網易:126.am
            新浪: t.cn
            人人:   rrurl.cn
            百度:dwz.cn
            第一家提供短網址服務的公司: tinyurl.cn
            一般短網址介面的使用方法都是POST引數到伺服器,然後伺服器返回資訊。不過找了下貌似很多都沒有開放介面,有的網站開放了介面但是引數裡必須要求有使用者登陸啊,使用者授權神馬的。所以還是萌萌的度娘好,完全免費呼叫,引數乾淨明朗。而且度娘之前就搞過短網址服務不過由於域名實在太長
,被稱為網址最長的短網址服務。所以後來悄悄收購了dwz.cn的域名重新低調上線,真是難為度娘了。度娘不哭~~站起來X。

                  1、生成短網址
                             
請求:向dwz.cn/create.php傳送post請求,傳送資料包括url=長網址
                             返回:
json格式的資料

                                        1、status!=0 出錯,檢視err_msg獲得錯誤資訊(UTF-8編碼)

                                        2、成功,返回生成的短網址 tinyurl欄位    
                 2、自定義短網址
                         
請求:
向dwz.cn/create.php傳送post請求,傳送資料包括url=長網址&alias=自定義網址
                              返回:
json格式的資料

                                        1、Status!=0 出錯,檢視err_msg獲得錯誤資訊(UTF-8編碼)

                                        2、成功,返回生成的短網址 tinyurl欄位          


 
HTTP請求:
         一般短網址介面的使用方法都是POST引數到伺服器,然後伺服器返回資訊。不過找了下貌似很多都沒有開放介面,有的網站開放了介面請求引數要求使用者的授權或登陸。客戶端(可以是瀏覽器,其他應用程式)與伺服器進行互動,必須要傳送請求,這裡用的是HTTP協議。常用的一般是GET請求和POST請求,簡單來說兩種請求方式基本相同,都是提交資料到伺服器。區別在於GET方法是通過URL來提交資料,伺服器從收到的URL裡解析資料,這樣做從安全形度來講要低一些,而且不能提交大量的資料。POST方法是通過加密的表單方式傳送,所以資料量可以比較大且安全。像QQ空間,人人的訪問應該就是傳送的GET請求,從URL欄就可以直觀看到相應的引數如帳號,當前目錄是相簿還是日誌等等,而密碼註冊一類的都是POST請求。
                就實際程式碼來看,java的請求比較簡單,一些指令碼語言也應該比較簡單。java裡使用封裝好的URL,URLCONNECTION可以輕鬆請求到資料。而VC就特別的麻煩(而且類種類繁多,引數繁多,步驟繁多,總而言之也是個天坑!)。
                1
通過CInternetSession建立會話
                2、準備好各引數,資料包頭部,裡面包含協議方式,接收編碼,請求方式等等
                3、通過
CHttpConnection建立連線
                4、通過
CHttpFile建立讀寫檔案pfile
                5、 使用pfile來OpenRequest,SendRequest
                6、讀取返回資料,關閉連線

                VC是天坑。。。。。還可以用其他API,WINHTTP包,TCP/IP。。。。不過每種都很複雜麻煩而且攪在一堆

JAVA 在網路方面確實很方便:


                 /*****************************
                 * 逸雨清風出品
                 * 淘寶店鋪名:逸雨清風書屋,出售電子書,程式設計,解決電腦問題
                 * 新浪微博:仁壽府府尹
                 * CSDN:http://blog.csdn.net/xyydyyqf
                 * DATE: 2013-6-1
                 * 祝我兒童節快樂!
                 ******************************/
                import java.awt.datatransfer.Clipboard;
                import java.awt.datatransfer.StringSelection;
                import java.awt.event.ActionEvent;
                import java.awt.event.ActionListener;
                import java.awt.event.KeyAdapter;
                import java.awt.event.KeyEvent;
                import java.io.BufferedReader;
                import java.io.InputStreamReader;
                import java.io.PrintWriter;
                import java.net.URL;
                import java.net.URLConnection;
                import java.security.acl.Owner;
               
                import javax.swing.JButton;
                import javax.swing.JFrame;
                import javax.swing.JLabel;
                import javax.swing.JOptionPane;
                import javax.swing.JPanel;
                import javax.swing.JTextField;
                import javax.swing.SwingConstants;
               
                public class dwz extends JFrame implements ActionListener
                {
                    private static char[] shortdwz = new char[100];
                    private static char[]  line2;
                    private static String line;
                    private static char[] suitable;
                   
                    private JPanel panel;
                    private JButton btncreat,btnclear,btncopy;
                    private JLabel lbllong,lblshort,lblcopy,lblmyshort,lblhelp;
                    private JTextField txtlong;
                    private JTextField txtshort;
                    private JTextField txtmyshort;
                   
                    public dwz()
                    {
                        super("短網址生成器");
                        panel = new JPanel();
                        lbllong = new JLabel("原網址");
                        lblshort = new JLabel(" 短網址");
                        lblcopy = new JLabel("等待複製");
                        lblmyshort = new JLabel("自定義 http://dwz.cn/");
                        lblhelp = new JLabel("字母,數字,破折號");
                        txtlong = new JTextField(30);
                        txtshort = new JTextField(22);
                        txtmyshort = new JTextField(14);txtmyshort.setText("");
                        txtlong.setHorizontalAlignment(SwingConstants.LEFT);
                        txtshort.setHorizontalAlignment(SwingConstants.LEFT); //左對齊
                        btncreat = new JButton("生成");
                        btnclear = new JButton("清空");
                        btncopy = new JButton("複製網址");
                        panel.add(lbllong);panel.add(txtlong);
                        panel.add(lblmyshort);panel.add(txtmyshort);panel.add(lblhelp);
                        panel.add(lblshort);panel.add(txtshort);panel.add(btncopy);
                        panel.add(btncreat);panel.add(btnclear);panel.add(lblcopy);
                        txtlong.addKeyListener(new KeyEnterLisener());
                        txtmyshort.addKeyListener(new KeyEnterLisener());
                        btncreat.addActionListener(this);
                        btnclear.addActionListener(this);
                        btncopy.addActionListener(this);
                        this.add(panel);
                        this.setSize(400,165);
                        this.setLocationRelativeTo(null);
                        this.setResizable(false);
                    }
                    public void actionPerformed(ActionEvent e)
                    {
                        Object source = e.getSource();
                        if (source == btncreat)
                        {
                            if (txtmyshort.getText().equals(""))
                            txtshort.setText(Getdwz(txtlong.getText()));
                            else txtshort.setText(GetMydwz(txtlong.getText(),txtmyshort.getText()));
                        }
                        if (source == btnclear)
                        {
                            txtshort.setText("");
                            txtlong.setText("");
                            txtmyshort.setText("");
                            lblcopy.setText("等待複製");
                            line = null; line2 = null;
                        }
                        if (source == btncopy)
                        {
                             Clipboard clipboard = getToolkit().getSystemClipboard(); //獲得系統剪下板
                             StringSelection stringSelection = new StringSelection(txtshort.getText());
                             clipboard.setContents(stringSelection,null);
                             lblcopy.setText("複製成功");
                        }
                    }
                    public class KeyEnterLisener extends KeyAdapter
                    {
                        public void keyPressed(KeyEvent e)
                        {
                            if (e.getKeyCode() == KeyEvent.VK_ENTER)
                                if (txtmyshort.getText().equals(""))
                                    txtshort.setText(Getdwz(txtlong.getText()));
                                    else txtshort.setText(GetMydwz(txtlong.getText(),txtmyshort.getText()));
                        }
                    }
                   
                    public static String Getdwz(String longwz)
                    {
                        try {
                            String strurl = "url="+longwz;
                            URL url = new URL("http://dwz.cn/create.php");   //偉大的度娘,無需使用者登陸授權就可直接呼叫API
                            //URL url = new URL("http://126.am/api!shorten.action"); 網易的API必須另外要使用者的key做引數,其他門戶沒有找到公開的API
                            URLConnection connection = url.openConnection();  //開啟url連線
                            connection.setDoOutput(true); //設定為輸出
                            PrintWriter out = new PrintWriter(connection.getOutputStream());
                            out.write(strurl); //寫入短網址到PORT請求
                            out.flush();
                            out.close();
                            BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
                            while ((line = in.readLine())!= null)  //得到返回的資訊
                            {
                                line2 = line.toCharArray();
                            }
                            for (int i=0;i<line2.length;i++)
                            if (line2[i] == 'h')
                                {
                                    int k=i,j;
                                    for (j=0;line2[k]!='"';j++)
                                    {
                                        if (line2[k] != '\\') shortdwz[j] = line2[k];
                                        else j--;
                                        k++;
                                    }
                                    suitable = new char[j];
                                    for (int temp=0;temp<j;temp++)
                                    suitable[temp] = shortdwz[temp];
                                    System.out.println(suitable);
                                    break;
                                }
                        } catch (Exception e) {
                            System.out.println("傳送POST請求出現異常!" + e);
                            e.printStackTrace();
                        }
                        if (shortdwz[7]!='d' || shortdwz[8]!='w' || shortdwz[9]!='z')
                        {
                            JOptionPane.showMessageDialog(null,"原網址輸入錯誤或無效!","錯誤",JOptionPane.ERROR_MESSAGE);
                            return null;
                        }
                        line =new String(suitable);
                        return line;
                    }   
                    public static String GetMydwz(String longwz,String myshort)
                    {
                        try {
                            String strmyurl = "url="+longwz+"&alias="+myshort;
                            URL url = new URL("http://dwz.cn/create.php");   //偉大的度娘,無需使用者登陸授權就可直接呼叫API
                            URLConnection connection = url.openConnection();  //開啟url連線
                            connection.setDoOutput(true); //設定為輸出
                            PrintWriter out = new PrintWriter(connection.getOutputStream());
                            out.write(strmyurl); //寫入短網址到PORT請求
                            out.flush();
                            out.close();
                            BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
                            while ((line = in.readLine())!= null)  //得到返回的資訊
                            {
                                line2 = line.toCharArray();
                            }
                            for (int i=0;i<line2.length;i++)
                                if (line2[2] == 's' && line2[3] == 't' && line2[4] == 'a' && line2[5] == 't')
                                {
                                    JOptionPane.showMessageDialog(null,"哦豁,運氣撇,被人捷足先登了\n這個短網址已經被定義過了或不合法,","哦豁",JOptionPane.ERROR_MESSAGE);
                                    return null;
                                }
                                else if (line2[2] == 'e' && line2[3] == 'r' && line2[4] == 'r')
                                {
                                    JOptionPane.showMessageDialog(null,"哦豁,運氣撇,被人捷足先登了\n這個長網址已經對映其他短網址了,","哦豁",JOptionPane.ERROR_MESSAGE);
                                    return null;
                                }
                            else if (line2[i] == 'h' )
                                {
                                    int k=i,j;
                                    for (j=0;line2[k]!='"';j++)
                                    {
                                        if (line2[k] != '\\') shortdwz[j] = line2[k];
                                        else j--;
                                        k++;
                                    }
                                    shortdwz[j] = '\0';
                                    break;
                                }
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                        if (shortdwz[7]!='d' || shortdwz[8]!='w' || shortdwz[9]!='z')
                        {
                            JOptionPane.showMessageDialog(null,"原網址輸入錯誤或無效!","錯誤",JOptionPane.ERROR_MESSAGE);
                            return null;
                        }
                        line =new String(shortdwz);
                        return line;
                    }
                   
                    public static void main(String[] args) throws Exception
                    {
                        new dwz().setVisible(true);
                    }
                }

               

VS10一如既往的天坑,尤其是呼叫系統API的時候:

                  //VC傳送POST請求的時候始終有異常,暫未處理

             /*****************************
             * 逸雨清風出品
             * 淘寶店鋪名:逸雨清風書屋,出售電子書,程式設計,解決電腦問題
             * 新浪微博:仁壽府府尹
             * CSDN:http://blog.csdn.net/xyydyyqf
              * DATE: 2013-6-2
             ******************************/
            #include "stdafx.h"
            #include "dwz.h"
            #include "afx.h"
            #include <afxinet.h>

            BOOL WINAPI Main_Proc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam);
            BOOL Main_OnInitDialog(HWND hWnd,HWND hWndFocus,LPARAM lParam);
            void Main_OnCommand(HWND hWnd,int id,HWND hwndCtl,UINT codeNotify);
            void Main_OnClose(HWND hWnd);
            char* Getdwz(CString longwz);
            char* Getmydwz(CString longwz,CString myshortwz);

            int APIENTRY _tWinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPTSTR lpCmdLine,int nCmdShow)
            {
                DialogBox(hInstance,MAKEINTRESOURCE(IDD_MAINDIALOG),NULL,Main_Proc);
                return 0;
            }
             BOOL WINAPI Main_Proc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
            {
            switch(uMsg)
                {
            //開始訊息測試
            HANDLE_MSG(hWnd,WM_INITDIALOG,Main_OnInitDialog);
            HANDLE_MSG(hWnd,WM_COMMAND,Main_OnCommand);
            HANDLE_MSG(hWnd,WM_CLOSE,Main_OnClose);
            //結束訊息測試
                    }
            return FALSE;
            }
             BOOL Main_OnInitDialog(HWND hWnd,HWND hwndFocus,LPARAM lParam)
                {
            //設定應用程式圖示
            HICON hIcon = LoadIcon((HINSTANCE)GetWindowLong(hWnd,GWL_HINSTANCE),MAKEINTRESOURCE(IDI_ICON3));
                SendMessage(hWnd,WM_SETICON,TRUE,(LPARAM)hIcon);
                SendMessage(hWnd,WM_SETICON,FALSE,(LPARAM)hIcon);
            //新增初始化程式碼
               return TRUE;
                }

            //主視窗關閉
          void Main_OnClose(HWND hWnd)
            {
            EndDialog(hWnd,0);
            }
            //主視窗命令響應
            void Main_OnCommand(HWND hWnd,int id,HWND hwndCtl,UINT codeNotify)
            {
                switch(id)
                {
                case IDCREAT:
                        char  *longwz,*myshortwz,*shortwz;
                        ZeroMemory(longwz,sizeof(longwz));
                        ZeroMemory(myshortwz,sizeof(myshortwz));
                        ZeroMemory(shortwz,sizeof(shortwz));
                        GetDlgItemText(hWnd,IDC_LONG,longwz,sizeof(longwz));
                        GetDlgItemText(hWnd,IDC_MYSHORT,myshortwz,sizeof(myshortwz));
                        if (myshortwz == NULL)  shortwz = Getdwz(longwz);
                        else shortwz = Getmydwz(longwz,myshortwz);
                        SetDlgItemText(hWnd,IDC_SHORT,shortwz);
                    break;
                case IDCLEAR:
                        SetDlgItemText(hWnd,IDC_SHORT,"");
                        SetDlgItemText(hWnd,IDC_LONG,"");
                        SetDlgItemText(hWnd,IDC_MYSHORT,"");
                        break;
                case IDCOPY:
                    char* source;
                    GetDlgItemText(hWnd,IDC_SHORT,source,sizeof(source));
                    if(OpenClipboard(NULL))
                    {
                        /*HGLOBLA clipbuffer;
                        char *buffer;
                        EmptyClipboard();
                        clipbuffer=GlobalAlloc(GMEM_DDESHARE,source.GetLength()+1);
                        buffer=(char *)GlobalLock(clipbuffer);
                        strcpy(buffer,LPCSTR(source));
                        GlobalUnLock(clipbuffer);
                        SetClipboardData(CF_TEXT,clipbuffer);
                        CloseClipboard();*/
                    }
                    break;
                default:break;
                }
            }

            char* Getdwz(CString longwz)
            {
                char chHeader[128];
                char chData[128];
                char tChars[128];

                memset(tChars,0,128);
                CInternetSession session;
                CHttpConnection* pConnection=NULL;
                CHttpFile* pFile=NULL;
                INTERNET_PORT nPort=8080;

                strcpy(chHeader,"Content-Type: application/x-www-form-urlencoded");
                strcpy(chData,"url=");
                strcat(chData,longwz);

                pConnection = session.GetHttpConnection("http://dwz.cn",nPort);
                pFile = pConnection->OpenRequest(CHttpConnection::HTTP_VERB_POST,"/create.php");
                pFile->SendRequest(chHeader,(DWORD)strlen(chHeader),(LPVOID *)chData,strlen(chData));
                pFile->Read(tChars,128);
                session.Close();

                char* shortdwz;
                ZeroMemory(shortdwz,sizeof(shortdwz));
                for (int i=0;i<sizeof(tChars);i++)
                    if (tChars[i] == 'h')
                    {
                        int k=i,j;
                        for (j=0;tChars[k]!='"';j++)
                        {
                            if (tChars[k] != '\\') shortdwz[j] = tChars[k];
                            else j--;
                            k++;
                        }
                        shortdwz[j] = '\0';
                        break;
                    }
                if (shortdwz[7]!='d' || shortdwz[8]!='w' || shortdwz[9]!='z')
                {
                MessageBox(NULL,"原網址輸入錯誤或無效!","錯誤",MB_ICONINFORMATION|MB_OK);
                return NULL;
                }
                return shortdwz;    
            }    
            char* Getmydwz(CString longwz,CString myshortwz)
            {
                char chHeader[128];
                char chData[128];
                char tChars[128];

                memset(tChars,0,128);

                CInternetSession session;
                CHttpConnection* pConnection=NULL;
                CHttpFile* pFile=NULL;
                INTERNET_PORT nPort=8080;

                strcpy(chHeader,"Content-Type: application/x-www-form-urlencoded");
                strcpy(chData,"url=");
                strcat(chData,longwz);
                strcat(chData,"&alias=");
                strcat(chData,myshortwz);

                pConnection = session.GetHttpConnection("http://dwz.cn",nPort);
                pFile = pConnection->OpenRequest(CHttpConnection::HTTP_VERB_POST,"/create.php");
                pFile->SendRequest(chHeader,(DWORD)strlen(chHeader),(LPVOID *)chData,strlen(chData));
                pFile->Read(tChars,128);
                session.Close();

                char* shortdwz;
                ZeroMemory(shortdwz,sizeof(shortdwz));
                for (int i=0;i<sizeof(tChars);i++)
                    if (tChars[2] == 's' && tChars[3] == 't' && tChars[4] == 'a' && tChars[5] == 't')
                    {
                        MessageBox(NULL,"哦豁,運氣撇,被人捷足先登了\n這個短網址已經被定義過了或不合法,","哦豁",MB_ICONINFORMATION|MB_OK;
                        return NULL;
                    }
                    else if (tChars[2] == 'e' && tChars[3] == 'r' && tChars[4] == 'r')
                    {
                        MessageBox(NULL,"哦豁,運氣撇,被人捷足先登了\n這個長網址已經對映其他短網址了,","哦豁",MB_ICONINFORMATION|MB_OK);
                        return NULL;
                    }
                    else if (tChars[i] == 'h')
                    {
                        int k=i,j;
                        for (j=0;tChars[k]!='"';j++)
                        {
                            if (tChars[k] != '\\') shortdwz[j] = tChars[k];
                            else j--;
                            k++;
                        }
                        shortdwz[j] = '\0';
                        break;
                    }
                    if (shortdwz[7]!='d' || shortdwz[8]!='w' || shortdwz[9]!='z')
                    {
                        MessageBox(NULL,"原網址輸入錯誤或無效!","錯誤",MB_ICONINFORMATION|MB_OK);
                        return NULL;
                    }
                    return shortdwz;    
            }

                 


傲嬌的偽生日自定義地址:http://dwz.cn/19930622  //java原始碼與JVM下可執行JAR


隨想 || 發神:
           
about mobile QQ2013:手機QQ最新版叫罵一片,不過除了罵點讓人不爽意外,有兩個功能倒確實挺牛叉的。像是檔案傳輸,多客戶端互傳檔案,這是要多牛叉的協議才能做到,手機上可能還要針對不同的機型,不曉得有沒得抽象出來的包。還有一個功能就是聊天資訊同步。當手機登陸伺服器的時候,自動掃描當前線上的客戶端,而且這些客戶端的聊天資訊都是同步到伺服器上的,再由伺服器統一下發比如最近一小時的記錄到所有客戶端。說明騰訊的伺服器機制很牛叉,不曉得又是好多根頭髮好多杯咖啡泡出來的,真是企鵝中的戰鬥雞。(不過這也同樣說明聊天要河蟹 - - 騰訊把我們看得赤裸裸的,就連傳個線上檔案說不定他都有擷取一份)
          
遊戲外掛:說到外掛,不得不提易語言這種神奇的東西,這種傳說中的東東貌似專門為外掛做後臺,盜號,木馬,病毒神馬的都少不了它~~~一般外掛就是對指定程式的資料,記憶體進行操作。捕獲了當前的程式,對它進行一些原本沒有的操作。像找茬遊戲外掛神馬的,捕獲它的程式,獲取到遊戲裡的兩幅影像,再根據圖形演算法,將圖片劃分為N塊畫素塊,用各點畫素值的和計算每塊畫素塊的值,再比較兩張圖片不同的畫素塊,當差別超過預設的誤差範圍,則可以判定當前畫素塊不同,通過寫操作繪圖對使用者做出提示。至於N的值和預設的誤差值是多少要看具體情況修改。像連連看這種估計也差不多,可能要用到Windows鉤子,還要進行滑鼠模擬操作。
          
網路協議:一般百度的時候URL裡就有wd=“搜尋的值“,應該就是GET請求的資料直接通過URL傳送,然後百度伺服器進行響應返回這個頁面。其他很多地方的網址都有這樣的效果,或是XML的解析。騰訊用的是UDP的協議,所以有離線的功能咪。
          
雲:好流行啊好流行,都在做雲,不管是搞儲存的還是搞安全的,不過為毛感覺就是以前的伺服器,換了個馬甲就爬出來裝新造勢咪。不過這些網站真心好有錢就是了,隨隨便便一個使用者就是免費送10個G,●﹏● ,雖然我不用。。。雲來雲去還不是要用網速下,就是伺服器網盤嘛,慢得很。
         
自動回覆指令碼:這個好啊!其實我超想搞這個的,像是現在的微博,人人,小黃雞,貼吧都是這種指令碼。人人的應該是專門註冊一個帳號,然後關注了很多公共主頁,然後搭建一個個人電腦伺服器,當伺服器電腦開啟的時候,上傳到伺服器上的指令碼就開始工作,用監聽的方式注意所有主頁,一旦有主頁有訊息更新就回復內容搶沙發,至於回覆的內容還可以隨機值/呼叫其他介面/固定值/圈人。至於微博就是那些打廣告的,自動掃描所有使用者,類似一個爬蟲指令碼吧,蔓延在整個微博,設定好了關注的關鍵字,像是"減肥、痘痘、淘寶"什麼的,就自動給該使用者留言打廣告,廣告內容根據抓取的該使用者關鍵字而不同。貼吧應該也差不多,不過要解決驗證碼的問題。小黃雞應該是有一個資料庫,呃。。。腫麼讓我想起了清華大學的機器人小圖,跟小黃雞應該是差不多的吧,屬於自然語言處理。通過演算法分析使用者輸入的語句語境,然後收集使用者回覆的話加入到資料庫,當有相同類似的對話的時候就可以呼叫收集到的話了,很高階的樣子膩~還是多客戶端的膩親~~而且資料選擇多了還可以隨機選擇一種回覆使得回覆不那麼單調。
             好吧 ( ̄▽ ̄) 所謂隨想就是隨便想的,完全木有理論依據的,認真你就輸了,哦嚯嚯嚯。當隨筆記下來了,以後有實際想法的再去一一實踐驗證。



 /*

******逸雨清風 出品

******http://blog.csdn.net/xyydyyqf

*/


             

相關文章