客戶端與伺服器端通訊

2021-06-12 09:17:01 字數 3709 閱讀 2924

關係圖

【傳送】

邏輯管理器 (處理邏輯傳送指令)→指令解析管理器(根據協議xml解析指令成二進位制資料)→把二進位制資料傳給伺服器

【接收】伺服器傳送二進位制資料到客戶端→指令解析管理器(根據協議xml解析二進位制資料)→根據解析資料對映到邏輯類來處理

<?xml version="1.0" encoding="utf-8"?>		

2 1

3

20

2,2

21

1,1,2

指令名和指令名對應的返回引數型別

cmdlib=new hashmap();

//---------------連線區域-------0到20區域段------------------------------

//---------------連線區域-------0到20區域段------------------------------

//---------------連線區域-------0到20區域段------------------------------

//客戶端接收請求

cmdlib.put(2, "net.socket.client.cmd.clientcommandmanager@receiveshakehand2"); //伺服器向客戶端傳送第二次握手

//客戶端傳送

cmdlib.put(3, "net.socket.server.cmd.servercommandmanager@receiveshakehand3"); //客戶端向伺服器申請第三次握手

//---------------登陸區域-------20到100區域段------------------------------

//---------------登陸區域-------20到100區域段------------------------------

//---------------登陸區域-------20到100區域段------------------------------

//客戶端傳送

cmdlib.put(20, "net.socket.server.cmd.servercommandmanager@receiveuserlogin"); //申請使用者登陸

//客戶端接收請求

cmdlib.put(21, "net.socket.client.cmd.clientcommandmanager@receiveloginrelt"); //返回使用者登陸結果

//---------------好友區域-------100到200區域段------------------------------

//---------------好友區域-------100到200區域段------------------------------

//---------------好友區域-------100到200區域段------------------------------

//客戶端傳送

//客戶端接收請求

cmdlib.put(102, "net.socket.client.cmd.clientcommandmanager@receivefriendslist"); //接收到好友列表

cmdlib.put(103, "net.socket.client.cmd.clientcommandmanager@receivefriendlogin"); //接收到好友登陸

cmdlib.put(104, "net.socket.client.cmd.clientcommandmanager@receivefriendloginout"); //接收到好友下線

//---------------裝置區域--------200到300區域段-----------------------------

//---------------裝置區域--------200到300區域段-----------------------------

cmdlib.put(202, "web.dev.cmd.devcommandmanager@receivedevupdate"); //獲取到有裝置公升級

cmdlib.put(203, "web.dev.cmd.devcommandmanager@receivedevupdateresult"); //返回裝置公升級結果

cmdlib.put(205, "web.dev.cmd.devcommandmanager@receivedevlist"); //獲取裝置列表

邏輯類:

/**

* 申請登陸

* @param name 使用者名稱

* @param passward 密碼

*/int cmdid=20;

commandparsemanager.writeparsecmd(new object);

}

指令解析類:

/**

* 傳送指令

* @param cmdid 協議id

* @param objects 引數陣列

* @param socket 客戶端socket

*/public static void writeparsecmd(object objects) catch (ioexception e)

}

傳送資料到伺服器

/**

* 傳送二進位制訊息

*/public void sendmessage() catch (ioexception e)

}

接收到伺服器傳來二進位制資料

// 建立好伺服器連線後,與伺服器端同步服務的執行緒

class clientthread extends thread

public void run() catch (ioexception e)

}} }

解析二進位制資料,

呼叫指令對應方法和傳入指令對應方法引數,來做客戶端的邏輯處理

/**

* 讀取指令

* @param objects

* @param socket

* @throws ioexception

*/public static void readparsecmd(clientsocket socket) throws ioexception

客戶端邏輯

/**

* 伺服器返回登陸結果

* @param userid 使用者id

* @param issuc 是否登陸成功

* @param failmsg 失敗原因

*/public void receiveloginrelt(integer userid,integer issuc,string failmsg)

}

邏輯跟客戶端類似,這裡直說哈擴散思路,

使用者請求公會人員時,會從公會管理器的快取內取,沒有的話就會查詢資料庫然後快取起,下次取得時候就不用查詢資料庫了,同時公會的刪人,加人也要一起維護這個快取

C Socket TCP 客戶端,伺服器端通訊

客戶端與伺服器通訊,通過ip 識別主機 埠號 識別應用程式 埠號 可自行設定,但通常為4位。伺服器端 using system using system.collections.generic using system.linq using system.net using system.net.s...

js 客戶端與伺服器端的通訊

客戶端與伺服器端通訊一般有兩種方法,隱藏iframe和使用xmlhttp物件 隱藏框架技術實現ajax通常由4個過程組成。第一步是由使用者的某種行為引發了乙個對隱藏框架的請求。這包括使用者單擊了在可見框架頁中的超連結,或者由使用者的其他互動行為所引發。通常情況下,對隱藏框架頁的請求僅僅是將隱藏框架頁...

客戶端跳轉與伺服器端跳轉

客戶端跳轉時用httpservletresopse物件的sendredirect函式實現,伺服器端跳轉是使用requestdispather物件的forward方法實現的。這兩者之間的區別主要體現在三個方面 1.使用伺服器端跳轉時,客戶瀏覽器的位址列並不會顯示目標位址的url,而是用客戶端跳轉時,位...