實作類似 Yahoo/MSN 的多執行緒 Client/Server 即時通訊應用,基於 TCP 連線,支援個人訊息、會議模式、客戶端清單同步等功能。
定義命令列舉與訊息結構,採用管線符號 `|` 分隔欄位的文字協定:
public enum Command
{
Login = 0,
PersonalMessage = 1,
ClientList = 2,
Conference = 3,
Logout = 4
}
public class Message
{
string strSender;
string strReceiver;
Command cmdMessageCommand;
string strMessageDetail;
public Message() { }
// 從原始位元組陣列解析
public Message(byte[] rawMessage)
{
string strRawStringMessage = System.Text.Encoding.ASCII.GetString(rawMessage);
string[] strRawStringMessageArray = strRawStringMessage.Split(new char[] { '|' });
this.strSender = strRawStringMessageArray[1];
this.strReceiver = strRawStringMessageArray[2];
this.cmdMessageCommand = (Command)Convert.ToInt32(strRawStringMessageArray[3]);
this.MessageDetail = strRawStringMessageArray[4];
}
// 序列化為位元組陣列傳輸
public byte[] GetRawMessage()
{
System.Text.StringBuilder sbMessage = new System.Text.StringBuilder("John"); // 協定標識
sbMessage.Append("|");
sbMessage.Append(strSender);
sbMessage.Append("|");
sbMessage.Append(strReceiver);
sbMessage.Append("|");
sbMessage.Append((int)cmdMessageCommand);
sbMessage.Append("|");
sbMessage.Append(strMessageDetail);
sbMessage.Append("|");
return System.Text.Encoding.ASCII.GetBytes(sbMessage.ToString());
}
// ... 屬性存取器略
}
傳輸格式:`John|發送者|接收者|命令代碼|訊息內容|`