關係圖
【傳送】
邏輯管理器 (處理邏輯傳送指令)→指令解析管理器(根據協議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,而是用客戶端跳轉時,位...