新版腾讯分分彩走势图 | 財經 | 資源 | 理財 | 考研 | 職場 | 論文 | 資格 | 股票學院 |

股票學院: 股票入門 - 股票知識 - 股票術語 - 炒股技巧 - 選股技巧 - 跟莊技巧 - 炒股經驗 - 投資策略 - K線圖 - 均線 - 分時圖 - 成交量 - 波浪理論 - 基本面分析 - 心理分析 - 漲停研究 - 趨勢線 - 江恩理論 - MACD - KDJ - 技術指標 - 財經股票書籍在線閱讀 - 金融類書籍下載 - 銀行學院 - 保險學院 - 外匯學院 - 債券學院 - 股票學院 - 基金學院 - 港股學院 - 黃金學院

當前位置:新版腾讯分分彩走势图 > 金融云 > 文章正文

极速走势图:Socket技術,實現Http協議和游戲服務器協議(Java代碼)

時間:2019-08-01 16:41:03來源:今日頭條作者:佚名

    新版腾讯分分彩走势图 www.atbwx.com 在網絡技術中,前后端通訊是一個難點,也是一個服務器程序員必須攻克的技術瓶頸。在兩臺計算機要實現信息交互,就需要一種技術來說,而兩臺計算機網卡來實現,無非就是兩種技術UDP和TCP,其中,兩種技術由于不同的特性,使用在不同的地方,在一些不要求高到達型傳輸領域(如:視頻)使用UDP之外,90%的通訊都是通過TCP協議來傳輸,由于其可靠的安全達到性。

    在程序員眼里,不用太想了解網卡是通過5層協議(或者說3層協議)怎么實現tcp通訊,在編程語言里socket就是tcp的代名詞(可能有點不準備哈,但是我個人是這樣認為的)。

    我們先用一個簡單的http協議中get案例來說,讓大家更好理解游戲前后端的通訊協議指定。

    Socket技術,實現Http協議和游戲服務器協議(Java代碼)

    以下為java代碼:

    1. public class testHttpClient { 
    2. public static void main(String[] arg){ 
    3. Socket socket=new Socket(); 
    4. try { 
    5. socket.connect(new InetSocketAddress("www.baidu.com", 80), 300); 
    6. OutputStream o=socket.getOutputStream(); 
    7. //http協議字符串 包括包頭和包體,http采用"\r\n"做為分割,包頭除了第一排之外,都是采用key:value方式來保存信息,一把服務器解鎖提取 
    8. String requestStr="GET / HTTP/1.1\r\n" //第一排三個信息 分別是 1、請求方式(一把都會用兩張get和post) 2、請求路徑 3、采用http1.1協議 
    9. +"Host: www.baidu.com\r\n" //申明Host 
    10. //如果有其它hearder 字段信息可以防止在這里 
    11. +"\r\n" //這里表示包頭結束 
    12. +"\r\n"; //這里表示包體結束(由于這個get沒有任何的結構體,如果需要向post那樣傳參 key1=value1&key2=value2,注意一定要在包頭中增加"Content-Length:***"申明包體長度) 
    13. o.write(requestStr.getBytes()); 
    14. o.flush(); 
    15. BufferedReader i= new BufferedReader(new InputStreamReader (socket.getInputStream())); 
    16. String response=""; 
    17. String readOneStr=null; 
    18. while ((readOneStr=i.readLine())!=null){ 
    19. response+=readOneStr+"\r\n"; 
    20. System.out.println(response); 
    21. }catch (IOException ioe){ 
    22. ioe.printStackTrace(); 
    socket技術,實現http協議和游戲服務器協議(java代碼)

    重點說明一下整個socket發送內容:http協議采用“\r\n”作為解碼器分割符號,這個協議的二進制流包括包頭和包體兩個部分,請求協議具體內容:

    包頭:

    1. GET / HTTP/1.1\r\n 

    使用空格分割成三個信息1、請求方式(一把都會用兩張get和post) 2、請求路徑 3、采用http1.1協議

    1. Host: www.baidu.com\r\n 
    2. Content-Length: ***\r\n 
    3. Content-type:application/json\r\n 
    4. Cookie:************\r\n 

    采用key:value的方式向服務器提交信息。Content-Length很重要,用于服務器讀取包體的長度。

    1. \r\n 

    再用“\r\n”來說明http包頭信息結束,后面的字節流是包頭內容

    1. \r\n 

    這個說明請求包體結束

    這里基本上一個http協議請求協議結束,然后我們再來看看服務器http響應信息,也是包括包頭和包體,包體有點變化的是第一個排“HTTP/1.1 200 OK\r\n” 也是三部分信息,返回協議,狀態碼和狀態(http中200就是成功響應的意思),除此以外也是也是key:value值了。也是采用連續的兩個“\r\n”來分割包頭和包體字節流。包體就沒有什么好說了,就是一些html、css、js代碼,也就我們實際用戶能看見的網頁代碼。

    附圖如下:

    socket技術,實現http協議和游戲服務器協議(java代碼)

    看完了上面的http協議,我們就可以理解我接下來要說明我在所以游戲項目服務器設計的協議,我們游戲項目由于功能需要,都是采用tcp長連接,服務器需要定時向游戲前端發送不同指令和響應前端請求,所以需要一個嚴謹高效的通訊協議:

    包頭

    1. 包頭開始識別碼(int)4+ 命令編號(shot)2 + 消息唯一編號(int)4 +內容長度(int)4 

    包體

    1. 內容bytes[] 

    用意說明:包頭含有四個重要信息,第一個是包頭開始識別碼,用于服務器在循環讀取socket管道信息時,發現新包開始。第二個是命令編號,就是前來請求服務器的動作指令(如:"1"用戶登入驗證,“2”為擊殺命令),服務器會自動去調用響應??櫬?。第三部分是這個包唯一碼,用于防止前端重復提交包,造成服務器業務邏輯錯誤。第四部分,就是包體字節流長度。這樣,每一個包頭固定長度為14字節,而包體是可有可無的,取決于調用命令是否是需要前端傳遞參數。

    相關閱讀

    焦點圖文

    關于我們 | 廣告服務 | 商務合作 | 網站地圖

    版權所有 Copyright(C)2018-2020 蘇州騏云躍網絡科技有限公司,未經授權禁止復制或建立鏡像,否則將依法追究法律責任!
    聲明:我們不做任何形式的代客理財及投資指導,凡是以天下金融網名義做股票推薦的行為均屬違法!
    廣告商的言論與行為均與天下金融網無關!股市有風險,投資需謹慎。
    蘇公網安備 32050502000166號
    蘇ICP備14018528號
    商務合作:新版腾讯分分彩走势图

    天下金融網版權所有