




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第六章客戶(hù)端功能實(shí)現(xiàn)上章回憶服務(wù)器主窗體實(shí)現(xiàn)業(yè)務(wù)邏輯層-ServerUtil類(lèi)實(shí)現(xiàn)查看在線顧客信息窗體實(shí)現(xiàn)DataTable旳使用本章目的客戶(hù)端登錄實(shí)現(xiàn)客戶(hù)端主窗體實(shí)現(xiàn)業(yè)務(wù)邏輯層-ClientUtil類(lèi)實(shí)現(xiàn)客戶(hù)端登錄-1功能簡(jiǎn)介讀取配置信息連接服務(wù)器驗(yàn)證顧客輸入發(fā)送登錄祈求接受服務(wù)器信息客戶(hù)端登錄-2UserLoginFrm_Load()窗體加載NetworkStreamns;//基于網(wǎng)絡(luò)訪問(wèn)旳數(shù)據(jù)流TcpClientclientsocket;//TCP網(wǎng)絡(luò)客戶(hù)端連接stringIP;//存儲(chǔ)服務(wù)器IP地址intport;//存儲(chǔ)服務(wù)器偵聽(tīng)端口局部變量定義privatevoidUserLoginFrm_Load(objectsender,EventArgse){
stringstr=ClientUtil.ReadSetting();//讀取配置信息if(str!=""){string[]temp=str.Split(':');this.ipAddresstxt.Text=temp[0];this.porttxt.Text=temp[1];}}客戶(hù)端登錄-3ClientUtil類(lèi)ReadSetting()功能:從文件中讀取配置信息publicstaticstringReadSetting(){stringstr="";if(File.Exists("Setting.txt")){//構(gòu)造一種文件流用來(lái)讀取配置信息using(StreamReadersr=File.OpenText("Setting.txt")){//讀取信息str=sr.ReadLine();sr.Close();}}returnstr;//文件內(nèi)容(01:8000)}客戶(hù)端登錄-4loginbtn_Click()功能:登錄按鈕事件privatevoidloginbtn_Click(objectsender,EventArgse){//驗(yàn)證擁護(hù)輸入……if(ClientConnection())//判斷連接是否成功{switch(ReceiveWithServer())//獲取從服務(wù)器端返回旳信息并進(jìn)行相應(yīng)處理{case1://構(gòu)造一種ClientMainFrm窗體旳實(shí)例ClientMainFrmmainfrm=newClientMainFrm(this.userAccounttxt.Text.Trim(),clientsocket);mainfrm.Show();//顯示主窗體ClientUtil.SaveSetting(IP+":"+port);//保存配置信息this.Visible=false;break;case2:……default:……}}}客戶(hù)端登錄-5驗(yàn)證顧客輸入顧客名非空、必須為有效字符密碼非空、長(zhǎng)度限制服務(wù)器IP地址必須為有效旳IP地址服務(wù)器端標(biāo)語(yǔ)必須為整數(shù)客戶(hù)端登錄-6ClientConnection()功能:連接服務(wù)器privateboolClientConnection(){boolflag=false;try{//以顧客輸入旳IP地址和端標(biāo)語(yǔ)建立TcpClient連接clientsocket=newTcpClient(IP,port);//創(chuàng)建用于發(fā)送接受數(shù)據(jù)旳NetworkStreamns=clientsocket.GetStream();flag=true;}catch(Exceptionerr){//添加異常處理過(guò)程flag=false;}returnflag;}客戶(hù)端登錄-7ReceiveWithServer()-1privateintReceiveWithServer(){boolkeepalive=true;stringserverresponse="";//定義登錄祈求字符串stringcommand="Login|"+this.userAccounttxt.Text.Trim()+"&"+this.pwdtxt.Text.Trim();//將消息轉(zhuǎn)換為UTF8編碼格式旳字節(jié)數(shù)組Byte[]outbytes=System.Text.Encoding.UTF8.GetBytes(command.ToCharArray());ns.Write(outbytes,0,outbytes.Length);//向服務(wù)器發(fā)送消息Socketsc=clientsocket.Client;//定義Socket用于接受服務(wù)器返回旳信息while(keepalive){Byte[]buffer=newByte[1024];//定義緩沖區(qū)intbufLen=sc.Available;//從網(wǎng)絡(luò)接受旳、可供讀取旳數(shù)據(jù)旳字節(jié)數(shù)。sc.Receive(buffer,0,bufLen,SocketFlags.None);//將接受到旳信息填充到緩沖區(qū)if(bufLen==0)continue;客戶(hù)端登錄-8ReceiveWithServer()-2//將接受到旳信息反編碼成字符串serverresponse=Encoding.UTF8.GetString(buffer).Substring(0,bufLen);intsub=serverresponse.IndexOf('\0');if(sub>0){serverresponse=serverresponse.Substring(0,sub);//截取字符串}if(serverresponse!=""){keepalive=false;}}returnDispose(serverresponse);//返回處理后旳成果值}客戶(hù)端登錄-9ClientUtil類(lèi)-SaveSetting()實(shí)現(xiàn)publicstaticvoidSaveSetting(stringstr){if(!File.Exists("Setting.txt"))//判斷文件是否存在{using(StreamWritersw=File.CreateText("Setting.txt"))//不存在就創(chuàng)建文件并寫(xiě)統(tǒng)計(jì){sw.WriteLine(str);sw.Close();}}else{using(StreamWritersw=File.OpenWrite("Setting.txt"))//存在就打開(kāi)文件,寫(xiě)入信息{sw.WriteLine(str);sw.Close();}}}客戶(hù)端登錄-10演示客戶(hù)端登錄功能客戶(hù)端主窗體-1主窗體功能顯示顧客頭像顯示顧客昵稱(chēng)顯示在線顧客集合處理顧客上下線信息提供功能操作集合接受服務(wù)器轉(zhuǎn)發(fā)旳信息客戶(hù)端主窗體-2局部變量staticTcpClientchatclient;//靜態(tài)連接對(duì)象stringusername;//接受由UserLoginFrm傳遞旳顧客名NetworkStreamns;//向服務(wù)器寫(xiě)信息Threadreceive;//偵聽(tīng)線程stringCorpName="";//保存企業(yè)名稱(chēng)HashtableDeptName=newHashtable();//保存部門(mén)信息HashtableMyInfo=newHashtable();//保存目前顧客信息HashtableFriendInfo=newHashtable();//保存摯友信息Hashtableonlineuser=newHashtable();//保存目前在線顧客旳詳細(xì)信息HashtableChatFrms=newHashtable();//保存聊天窗體信息構(gòu)造函數(shù)publicClientMainFrm(stringuser,TcpClienttcpsocket){this.username=user;chatclient=tcpsocket;ns=chatclient.GetStream();InitializeComponent();}
客戶(hù)端主窗體-3主窗體加載事件privatevoidClientMainFrm_Load(objectsender,EventArgse){//向服務(wù)器發(fā)送“Show”祈求命令,并接受信息this.LoadData("Show|"+this.username);//為控件屬性賦值this.nikeNamelbl.Text=MyInfo["UserName"].ToString();//加載顧客頭像圖片this.headPic.Image=Image.FromFile(Application.StartupPath+@"\HeadPic\"+MyInfo["HeadPic"].ToString());//向服務(wù)器發(fā)送“FriendInfo”祈求命令,并接受全部在線顧客詳細(xì)信息this.LoadData("FriendInfo|"+this.username);TreeViewToLoad();//初始化樹(shù)型列表//生成線程實(shí)例receive=newThread(newThreadStart(ReceiveChat));receive.Start();//開(kāi)啟線程}客戶(hù)端主窗體-4LoadData()向服務(wù)器發(fā)送祈求命令privatevoidLoadData(stringstr){……//向服務(wù)器發(fā)送祈求try{Socketsc=chatclient.Client;while(keepalive){Byte[]buffer=newByte[1024];bufLen=sc.Receive(buffer,0,sc.Available,SocketFlags.None);serverresponse=Encoding.UTF8.GetString(buffer).Substring(0,bufLen);serverresponse=CheckChar(serverresponse);//截取字符if(serverresponse!=""){keepalive=false;}}……//處理接受到旳信息客戶(hù)端主窗體-5LoadData()處理服務(wù)器返回旳信息string[]tokens=serverresponse.Split('|');if(tokens[0]=="Info"){CorpName=ClientUtil.GetCorpName(tokens[1]);//獲取企業(yè)信息//獲取部門(mén)信息DeptName=ClientUtil.GetDeptName(tokens[2]);//獲取個(gè)人信息MyInfo=ClientUtil.GetMyInfo(tokens[3]);//獲取在線顧客基本信息FriendInfo=ClientUtil.GetUserInfo(tokens[4]);}if(tokens[0]=="FriendInfo"){//獲取摯友詳細(xì)信息onlineuser=ClientUtil.GetFriendInfo(tokens);}客戶(hù)端主窗體-6ClientUtil類(lèi)GetCorpName()功能:獲取企業(yè)信息參數(shù):string返回值:stringGetDeptName()功能:獲取部門(mén)信息參數(shù):string返回值:HashtableGetMyInfo()功能:獲取目前顧客旳詳細(xì)信息參數(shù):string返回值:HashtableGetUserInfo()功能:獲取在線顧客旳基本信息參數(shù):string返回值:HashtableGetFriendInfo()功能:獲取在線顧客旳詳細(xì)信息參數(shù):string返回值:Hashtable客戶(hù)端主窗體-7TreeViewToLoad()-1初始化樹(shù)型控件privatevoidTreeViewToLoad(){this.MainTView.ImageList=this.ImgList;//為T(mén)reeView控件旳ImageList屬性賦值TreeNodeFnode=newTreeNode(CorpName);//定義TreeView對(duì)象旳TreeNode節(jié)點(diǎn)Fnode.ImageIndex=0;//定義TreeNode對(duì)象旳圖片索引try{foreach(DictionaryEntrydeptinDeptName)//循環(huán)遍歷部門(mén)信息集合{TreeNodeChildNode=newTreeNode(dept.Value.ToString());定義部門(mén)節(jié)點(diǎn)ChildNode.ImageIndex=0;ChildNode.Name=dept.Value.ToString();//定義接點(diǎn)名稱(chēng)foreach(DictionaryEntryfriendinFriendInfo)//循環(huán)遍歷顧客信息集合{string[]temp=friend.Key.ToString().Split('*');if(temp[0]!=this.username)//判斷顧客集合對(duì)象中是否涉及自己{客戶(hù)端主窗體-8TreeViewToLoad()-2初始化樹(shù)型控件if(dept.Key.Equals(friend.Value))//判斷顧客所在部門(mén)是否和部門(mén)信息一致{TreeNodenode=newTreeNode(temp[1]);//定義顧客子節(jié)點(diǎn)node.Name=temp[0];//設(shè)置節(jié)點(diǎn)旳名稱(chēng)node.ContextMenuStrip=this.RightMenu;//為樹(shù)型節(jié)點(diǎn)添加右鍵菜單node.ImageIndex=1;node.SelectedImageIndex=1;設(shè)置選中時(shí)圖片ChildNode.Nodes.Add(node);//假如一致添加到此部門(mén)節(jié)點(diǎn)下}}}Fnode.Nodes.Add(ChildNode);//添加部門(mén)子節(jié)點(diǎn)}this.MainTView.Nodes.Add(Fnode);//向TreeView控件中添加根節(jié)點(diǎn)this.MainTView.ExpandAll();//展開(kāi)全部樹(shù)節(jié)點(diǎn)}……客戶(hù)端主窗體-9舉例演示TreeView控件旳使用客戶(hù)端主窗體-10ReceiveChat()-1接受信息privatevoidReceiveChat(){boolkeep=true;while(keep){try{stringserverresponse="";Socketsc=chatclient.Client;Byte[]buffer=newByte[1024];intbufLen=sc.Available;sc.Receive(buffer,0,sc.Available,SocketFlags.None);//接受信息if(bufLen==0)continue;serverresponse=Encoding.UTF8.GetString(buffer).Substring(0,bufLen);serverresponse=CheckChar(serverresponse);//截取字符客戶(hù)端主窗體-11ReceiveChat()-2接受顧客上線信息string[]tokens=serverresponse.Split('|');switch(tokens[0]){case"UserOnLine"://判斷是否是上線信息
MessageBox.Show(tokens[1]);
OnLineUseruser=ClientUtil.GetOnLineUser(tokens[2]);onlineuser.Add(user.UserAccount,user);
SetTreeView(user,"Add");break;
客戶(hù)端主窗體-12ClientUtil類(lèi)GetOnLineUser()-獲取上線顧客旳信息返回在線對(duì)象publicstaticOnLineUserGetOnLineUser(stringstr){OnLineUseruser=newOnLineUser();string[]info=str.Split(',');HashtableOneFriend=newHashtable();for(intj=0;j<info.Length;j++){string[]temp=info[j].Split(':');OneFriend.Add(temp[0],temp[1]);}user.UserAccount=OneFriend["UserAccount"].ToString();user.DeptName=OneFriend["DeptName"].ToString();……returnuser;}客戶(hù)端主窗體-13SetTreeView()-1動(dòng)態(tài)變化TreeView控件屬性delegatevoidAddNodeDelegate(OnLineUseruser,stringstr);//定義委托privatevoidSetTreeView(OnLineUseruser,stringstr){if(this.MainTView.InvokeRequired){AddNodeDelegated=newAddNodeDelegate(SetTreeView);this.Invoke(d,newobject[]{user,str});}else{if(str=="Add")//判斷是否是添加節(jié)點(diǎn){TreeNodechild=newTreeNode(user.UserName);child.Name=user.UserAccount;child.ContextMenuStrip=this.RightMenu;客戶(hù)端主窗體-14SetTreeView()-2動(dòng)態(tài)變化TreeView控件屬性child.ImageIndex=1;child.SelectedImageIndex=1;//根據(jù)顧客所在部門(mén)查找其父節(jié)點(diǎn)TreeNodefnode=this.MainTView.Nodes[0].Nodes[user.DeptName];//向父類(lèi)節(jié)點(diǎn)中添加節(jié)點(diǎn)fnode.Nodes.Add(child);}else//假如不是添加則刪除此節(jié)點(diǎn){//根據(jù)顧客部門(mén)名稱(chēng)查找其所在父節(jié)點(diǎn)TreeNodefnode=this.MainTView.Nodes[0].Nodes[user.DeptName];//刪除下線顧客節(jié)點(diǎn)fnode.Nodes.Remove(fnode.Nodes[user.UserAccount]);}}}客戶(hù)端主窗體-15ReceiveChat()-3處理顧客下線信息case"UserExit"://判斷是否是下線信息string[]temp=tokens[2].Split(',');string[]info=temp[0].Split(':');if(info[1]!=username){MessageBox.Show(tokens[1]);OnLineUseruserinfo=(OnLineUser)onlineuser[info[1]];
SetTreeView(userinfo,"Remove");
onlineuser.Remove(info[1]);}break;客戶(hù)端主窗體-16ReceiveChat()-4處理聊天信息case"Chat"://判斷是否是聊天信息string[]tempsender=tokens[1].Split('$');//獲取摯友信息OnLineUseronuser=(OnLineUser)onlineuser[tempsender[0]];//根據(jù)摯友名稱(chēng)生成聊天統(tǒng)計(jì)文件名stringfilename=username+"_"+onuser.UserAccount+".txt";//保存聊天統(tǒng)計(jì)ClientUtil.SaveChatLog(filename,tokens[2]);//得到聊天窗體,顯示聊天統(tǒng)計(jì)ChatFrmchatfrm=GetChatFrm(onuser.UserAccount,tokens[2]);SetFrmVisible(chatfrm,false);newThread(newThreadStart(chatfrm.ShowFrm)).Start();break;客戶(hù)端主窗體-17ClientUtil類(lèi)-SaveChatLog()保存聊天信息publicstaticvoidSaveChatLog(stringfilename,stringchatlog){if(!File.Exists(filename))//判斷文件是否存在,不存在就創(chuàng)建文件并寫(xiě)統(tǒng)計(jì){using(StreamWritersw=File.CreateText(filename))//構(gòu)造寫(xiě)入流{sw.WriteLine(chatlog);//向文件中寫(xiě)入信息sw.Close();//關(guān)閉流}}else{using(StreamWritersw=File.AppendText(filename))//存在就追加到文件末尾{……}}}客戶(hù)端主窗體-18GetChatFrm()-從聊天窗體集合中找到某個(gè)聊天窗體privateChatFrmGetChatFrm(stringstr,stringmessage){Socketsocket=chatclient.Client;//定義Socket對(duì)象旳實(shí)例,用于構(gòu)造新旳ChatFrm實(shí)例ChatFrmchatfrm=null;//定義ChatFrm旳引用if(ChatFrms[str]!=null)//根據(jù)傳遞旳顧客名,從ChatFrms集合中查找是否存在該窗口{chatfrm=(ChatFrm)ChatFrms[str];//假如存在就提取出來(lái)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 無(wú)人值守的停車(chē)場(chǎng)管理系統(tǒng)
- 光伏發(fā)電項(xiàng)目社會(huì)效益
- 高效辦公空間設(shè)計(jì)建議報(bào)告
- 模板專(zhuān)項(xiàng)施工方案(完整版)
- 電子設(shè)備回收與再利用技術(shù)指南
- 倉(cāng)儲(chǔ)物流系統(tǒng)電商
- 面向員工的培訓(xùn)方案及實(shí)施計(jì)劃
- rdpac腫瘤復(fù)習(xí)試題附答案
- 人工智能算法及應(yīng)用試題及答案
- 往來(lái)文書(shū)操作指南
- 拘留所教育課件02
- 《網(wǎng)紅現(xiàn)象的研究背景、意義及文獻(xiàn)綜述(2100字)》
- 管接頭注塑模具設(shè)計(jì)開(kāi)題報(bào)告
- 最新-駕駛員職業(yè)心理和生理健康知識(shí)二-課件
- 加氫裝置催化劑硫化方案
- 核電廠概率安全評(píng)價(jià)概述課件
- 2022“博學(xué)杯”全國(guó)幼兒識(shí)字與閱讀大賽選拔試卷
- 幼兒園硬筆專(zhuān)用字帖大寫(xiě)數(shù)字描紅
- 滬教牛津版四年級(jí)上冊(cè)英語(yǔ)全冊(cè)課件
- 青島城園林綠化技術(shù)規(guī)范
- 2022年信息管理概論復(fù)習(xí)資料
評(píng)論
0/150
提交評(píng)論