freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于tcp協(xié)議的簡單即時通信軟件的設計與實現(xiàn)-閱讀頁

2025-06-15 12:00本頁面
  

【正文】 9。 (ms, umessage)。 (0, )。 (d)。 (ms, umessage)。 (0, )。 (d)。 } } endregion如果發(fā)現(xiàn)用戶發(fā)送的是登錄信息,就根據(jù)登錄信息中的用戶名和密碼判斷是否存在用戶,密碼是否正確,成功后再查詢出用戶的好友信息并且賦值給FriendStruct,再將信息返回給客戶端: region 處理用戶登錄信息 else if (info == 1)//分辨出用戶發(fā)送的是登錄信息 { string Accounts = 。 SqlDataReader usdr = (select * from TCP_UserInfo where UserAccount=39。 and UserPassword=39。, )。 = usdr[UserFav].ToString()。 SqlDataAdapter sdr = new SqlDataAdapter(select * from TCP_UserInfo join TCP_FriendInfo on =39。 and =, )。 (ds, find)。 (update TCP_UserInfo set UserIP=39。 , UserOnline=1 where UserAccount=39。, )。 int i=0。 + uid + 39。 while (()) { ff[i].account=getf[UserAccount].ToString()。 ff[i].nickname = getf[UserNickname].ToString()。 ff[i].fg = getf[FriendGroup].ToString()。 } ()。 Socket sc = (Socket)alSock[(uc, 0)]。 = 11。 = xxx。 byte[] d = new byte[]。 (d, 0, )。 //在tb_status中寫入服務器返回給客戶端的代碼便于測試觀察 ((d))。 region 此處寫入登錄失敗代碼 Stream ms = new MemoryStream()。 = 10。 byte[] d = new byte[]。 (d, 0, )。 endregion } } } endregionTb_states是個用于監(jiān)視SOCKET傳入信息的文本框,便于觀察和測試相關信息: ([ + () + ] + (chat))。 } } }以上代碼也包含了對客戶端的請求信息的判斷和對客戶端返回信息的生成和傳輸。C。//新建一個用于監(jiān)聽的線程 ()。 計時器計時器用于實現(xiàn)心跳報文的功能,服務器在啟動以后就開始計時,每隔一定時間就向所有連入的客戶端發(fā)送信息,核心代碼如下: //用計時器檢查客戶端是否掉線 aTimer = new ()。 // 設置引發(fā)時間的時間間隔 此處設置為5秒(5000毫秒) = 5000。 CheckStatus就是用于向客戶端發(fā)送檢查信息的方法,它會向遍歷連入的客戶端(alSock),然后依次向客戶端發(fā)送信息,如果發(fā)現(xiàn)客戶端沒有響應,就會如果發(fā)現(xiàn)對方無回應,則關閉相應的SOCKET,并更新數(shù)據(jù)庫的用戶在線狀態(tài),同時向該用戶的所有好友發(fā)送用戶已下線的通知。 c = new Socket(,)。 s = new MemoryStream()。 byte[] d=new byte[]。 (d, 0, )。 } catch(Exception ex) { ()。 while(true) { int rect = (data)。 (data,0,chat,0,rect)。 string[] fg。 if(==3) { } else if(==11) { fg=(39。)。 ff=。ixxx。 ems[0]=ff[i].account。 ems[2]=fg[(ff[i].fg)]。 ems[4]=ff[i].status。 (item)。//新建一個用于監(jiān)聽其它客戶端信息的線程 ()。 =false。 } else if (==2) { (服務器未知錯誤)。} } endregion } endregion圖7 登錄成功后的客戶端界面客戶端之間的聊天同樣使用了序列化的XML文檔,用戶在登錄成功后就會啟動一個新的監(jiān)聽器去監(jiān)聽其它客戶端傳入的聊天信息并且進行判斷再將其它用戶的聊天信息顯示在界面上。 采用異步套接字的文件傳輸文件傳輸是通過一個類庫實現(xiàn)的。,,;。using 。namespace { /// summary /// ClientBase摘要. /// /summary public class ClientBase { private const int BUFFERSIZE = 4*1024。 private string _serverIP。 private ClientInfo _info。//異步回調(diào)方法public event NetworkEventHandler DataRecieved。 _port = 11000。 _info = new ClientInfo( _mainSoc,new byte[BUFFERSIZE])。//異步回調(diào) }// 可重寫為其它超類實現(xiàn)更強大的功能,例如斷點續(xù)傳 public virtual void OnDataRecieved(byte[] data) { if (DataRecieved != null) { DataRecieved(this, new NetworkEventArgs(_info))。//發(fā)送數(shù)據(jù) } public void Connect()//建立與遠程主機的連接 { ( new IPEndPoint( (_serverIP), _port))。 } public void WaitForData() { // 異步接收數(shù)據(jù) (,0, , _dataRecievedCallback,null)。 int byteCount = 0。 if (byteCount == 0) { // 服務器斷開連接. } else { OnDataRecieved()。 } } }} 派生類INPClinet:using System。namespace { /// summary /// INPClient的摘要. /// /summary public class INPClient : ClientBase { public INPClient(string serverIP,int port) : base(serverIP,port) {}public void SendFile(string fileName)//發(fā)送文件類,開啟一個文件流,將文件流依次讀入,再使用CLIENTBASE類中的數(shù)據(jù)發(fā)送方法進行發(fā)送 { FileStream fs = new FileStream( fileName,)。//根據(jù)文件長度定義一個BYTE (im,0,)。//使用基類(CLIENTBASE)的數(shù)據(jù)發(fā)送方法進行文件傳送 } }}INPSERVER和SERVERBASE與INPCLIENT和CLIENTBASE類似,所以這里不再詳述。本次設計雖然實現(xiàn)了簡單的即時通信功能,但是從很多方面來說都是不完善的:實現(xiàn)了字符聊天卻沒有實現(xiàn)多媒體即時通信;實現(xiàn)了同步套接字聊天和異步套接字傳送文件卻沒有實現(xiàn)更科學的異步套接字聊天和同步套接字傳送文件。由于與網(wǎng)絡緊密聯(lián)系,SOCKET編程的也可能出現(xiàn)各種未知的問題,需要我們更深入地了解網(wǎng)絡協(xié)議和架構,才可能做出通用性高,穩(wěn)定性高的即時通信程序。[2] 黃承安,謝東文,許聰. C網(wǎng)絡應用案例導航[M].北京:中國鐵道出版社,2003。[4] 周存杰. Visual C .NET網(wǎng)絡核心編程[M].北京:清華大學出版社,2002。[6] 李文志,申劍,盧方國,柳正青,王宏,陳建偉. [J].(2):6872。致 謝本文是在**老師的熱情關心和指導下完成的,她淵博的知識和嚴謹?shù)闹螌W作風使我受益匪淺,對順利完成本課題起到了極大的作
點擊復制文檔內(nèi)容
公司管理相關推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1