140 likes | 322 Views
Projektni rad Chat server i klijent. Radevic Zarko II-9/2006 Jankovic Bojan 124/2005. Uvod.
E N D
Projektni radChat server i klijent Radevic Zarko II-9/2006 Jankovic Bojan 124/2005
Uvod Ovaj projekat predstavlja program za komunikaciju (chatovanje) izmedju dva korisnika, klijenta i servera. Prenos poruka se odvija preko soketa, TCP vezom. Ova verzija omogućava naizmenično slanje i primanje poruka.Program je baziran na Csocket MFC klasi I moze se koristiti I u lokalnoj mrezi I na internetu
Server– prihvata konekcije od klijenata • – opslužuje više klijenata istovremeno • – prihvata poruku od klijenta i prosleđuje je • ostalim klijentima koji su povezani na njega Klijent– Šalje zahtev za konekcijom serveru • – šalje poruku serveru • – prima poruke od servera ( tj. od ostalih klijenata )
Server otvara prvi konekciju,a zatim klijent uspostavlja vezu sa serverom pozivom programa i IP adresom servera kao argumentom edit box kontrole. Tek tada je moguća komunikacija.Program se sastoji iz tri klase:CNDKServer,CNDKClient, CNDKMessage
Server Atributi: • BOOL IsStarted() const; • long GetPort() const; • long GetNbUsers() const; • void GetUserIds(CLongArray& alIds) const;
Operacije: • BOOL StartListening(long lPort); • void Stop(); • BOOL SendMessageToUser(long lUserId, CNDKMessage& message); • BOOL SendMessageToAllUsers(CNDKMessage& message); • BOOL SendMessageToSomeUsers(const CLongArray& alUserIds, CNDKMessage& message); • BOOL SendMessageToAllUsersExceptFor(long lUserId, CNDKMessage& message); • BOOL SendMessageToAllUsersExceptFor(const CLongArray& alUserIds, CNDKMessage& message); • BOOL DisconnectUser(long lUserId); • void DisconnectAllUsers(); • BOOL PingUser(long lUserId); • void PingAllUsers();
Klijent Atributi: • BOOL IsConnected() const; • BOOL GetIpAndPort(CString& strIp, long& lPort) const;
Operacije: • BOOL OpenConnection(const CString& strServerIp, long lPort); • void CloseConnection(); • BOOL SendMessageToServer(CNDKMessage& message); • BOOL PingServer();
CNDKMessage • enkapsulacija podataka koji su poslati I primljeni od strane klijenta I servera Atributi: • void SetId(long lId); • long GetId() const; • int GetNbElements() const;
Operacije: • void Add(TYPE typeData); • void SetAt(long lIndex, TYPE typeData); • void GetAt(long lIndex, TYPE& typeData) const; • void GetNext(TYPE& typeData);
Kod-Klijent <PRE>void CChatClientDlg::OnButtonSend() { if (UpdateData(TRUE)) { //Kreiraj poruku sa jedinstvenim ID-em-chat text CNDKMessage message(ChatText); // Dodaj podatke u poruku message.Add(m_strChatInput); // Posalji poruku serveru SendMessageToServer(message); // Update UI(user interface) dijaloga AddText(m_strChatInput); m_strChatInput.Empty(); UpdateData(FALSE); } } </PRE>
Kod-Server <PRE id=pre1 style="MARGIN-TOP: 0px">void CChatServerDlg::OnMessage(long lUserId, CNDKMessage& message) { switch (message.GetId()) { //... case ChatText: { CString strNickname; // preuzmi nickname koji se nalazi u mapi m_mapIdsNicknames.Lookup(lUserId, strNickname); CString strText; // Izvuci tekst koji je enkapsuliran u poruci message.GetAt(0, strText); // Update UI dijaloga AddText(strNickname + _T(": ") + strText); // Pripremi poruku message.SetAt(0, strNickname); message.SetAt(1, strText); // Posalji opruku svim ostalim korisnicima SendMessageToAllUsersExceptFor(lUserId, message); } break; //... } }</PRE>