BÁO cáo đồ án CHAT CLIENTS SERVER

33 885 7
BÁO cáo đồ án CHAT CLIENTS SERVER

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Họ tên: Phạm Vũ Thoại MSSV: 0971060 Lớp: 09TC – Mơn Lập trình mạng BÁO CÁO ĐỒ ÁN CHAT CLIENTS-SERVER NHỮNG VẤN ĐỀ CƠ BẢN VỀ MẠNG Mạng máy tính Mạng máy tính tập hợp máy tính thiết bị nối với đường truyền vật lý theo kiến trúc Chúng ta phân loại mạng theo qui mơ nó:  Mạng LAN (Local Area Network)-mạng cục bộ: kết nối nút phạm vi giới hạn Phạm vi cơng ty, hay tòa nhà  Mạng WAN (Wide Area Network): nhiều mạng LAN kết nối với tạo thành mạng WAN  MAN (Metropolitan Area Network), tương tự WAN, kết nối nhiều mạng LAN Tuy nhiên, mạng MAN có phạm vi thành phố hay đô thị nhỏ MAN sử dụng mạng tốc độ cao để kết nối mạng LAN trường học, phủ, cơng ty, , cách sử dụng liên kết nhanh tới điểm cáp quang 1.1 Thiết bị giao tiếp mạng (Network Interface Thiết bị) NIC thiết bị giao tiếp sử dụng để kết nối thiết bị với mạng LAN Nó cho phép gửi nhận thông điệp từ mạng Một NIC có địa MAC mà cung cấp định danh cho thiết bị Địa MAC số 12 byte-hệ 16 gán cho thiết bị mạng Địa thay đổi trình điều khiển mạng cách linh hoạt (như trường hợp hệ thống DECnet, mạng phát triển Digital Equipment), thông thường địa MAC không thay đổi   Đồ án mơn học Lập trình mạng SV: Phạm Vũ Thoại – 09TC    Trang: 1  Mơ hình Client-Server 2.1 Giới thiệu Mơ hình Client/Server mơ hình tổ chức trao đổi thơng tin mơ tả cách mà máy tính giao tiếp với theo phương thức định Phương thức chiến lược tổ chức phân cấp mà có máy tính đặc biệt phục vụ yêu cầu lưu trữ, xử lý, tính tốn tất máy mạng Kiểu tổ chức tổng qt mơ hình mạng LAN thiết lập từ nhiều máy tính khác nhau, máy tính gọi Server Một chương trình client chạy từ máy tính mạng gởi u cầu đến Server, server nhận yêu cầu thực gởi kết cho Client Hình Mơ hình Client/Server Có nhiều mơ hình sử dụng chương trình mạng mơ hình Client/Server mơ hình chuẩn Một Server trình, trình chờ liên hệ từ Client Một phiên làm việc điển hình mơ hình sau: - Phía Client gởi yêu cầu thông qua mạng đến Server để yêu cầu số dạng dịch vụ lấy tên máy Server, lấy đồng hồ hệ thống, đăng ký cấp … - Phía Server khởi động trước hệ thống máy tính Sau khởi động chờ Client liên hệ để yêu cầu số dịch vụ Quá trình Server thành chia kiểu:  Khi có yêu cầu Client Server phục vụ thời điểm gọi Server lặp  Khi Server phục vụ đồng thời nhiều yêu cầu từ Client gởi đến gọi Server đồng thời Client/Server mơ hình tổng quát nhất, thực tế Server nối tới nhiều Server khác nhằm làm việc hiệu Khi nhận yêu cầu từ Client, Server gửi tiếp yêu cầu vừa nhận cho Server khác ví dụ Database Server thân khơng thể xử lý u   Đồ án mơn học Lập trình mạng SV: Phạm Vũ Thoại – 09TC    Trang: 2  cầu Máy Server thi hành nhiệm vụ đơn giản phức tạp Ví dụ máy chủ trả lời thời gian ngày, máy Client yêu cầu lấy thơng tin thời gian phải gửi yêu cầu theo tiêu chuẩn Server định ra, yêu cầu chấp nhận máy Server trả thông tin mà Client yêu cầu Có nhiều dịch vụ Server mạng hoạt động theo nguyên lý nhận yêu cầu từ Client sau xử lý trả kết cho client u cầu Thơng thường chương trình Server Client thi hành hai máy khác Cho dù lúc Server trạng thái sẵn sàng chờ nhận yêu cầu từ Client thực tế tiến trình liên tác qua lại (interaction) Client Server lại bắt đầu phía Client, mà Client gửi tín hiệu yêu cầu tới Server Các chương trình Server thường thi hành mức ứng dụng (tầng ứng dụng mạng) Sự thuận lợi phương pháp làm việc mạng máy tính có hỗ trợ giao thức truyền thông chuẩn cụ thể giao thức TCP/IP Với giao thức chuẩn giúp cho nhà sản xuất tích hợp nhiều sản phẩm khác họ lên mạng mà khơng gặp phải khó khăn Với chuẩn chương trình Server cho dịch vụ thi hành hệ thống chia sẻ thời gian (timesharing system) với nhiều chương trình dịch vụ khác chạy máy tính nhân bình thường Có thể có nhiều chương Server làm dịch vụ, chúng nằm nhiều máy tính máy tính 2.2 Client Trong mơ hình Client/Server, người ta định nghĩa cụ thể cho máy Client máy trạm mà sử dụng người dùng với để muốn thể tính độc lập cho Máy Client sử dụng hệ điều hành bình thường Win9x, DOS, OS/2 Bản thân Client tích hợp nhiều chức hệ điều hành mà chạy, nối vào mạng LAN, WAN theo mơ hình Client/Server sử dụng thêm chức hệ điều hành mạng cung cấp với nhiều dịch vụ khác (cụ thể dịch vụ Server mạng cung cấp), ví dụ yêu cầu lấy liệu từ Server hay gửi liệu lên Server Thực tế ứng dụng mơ hình Client/Server, chức hoạt động kết hợp Client Server với chia sẻ tài ngun, liệu hai máy   Đồ án mơn học Lập trình mạng SV: Phạm Vũ Thoại – 09TC    Trang: 3  Trong mơ hình Client/Server, Client coi người sử dụng dịch vụ mạng nhiều máy chủ cung cấp Server coi người cung cấp dịch vụ để trả lời yêu cầu Clients Điều quan trọng phải hiểu vai trò hoạt động mơ hình cụ thể, máy Client mơ hình lại Server mơ hình khác Ví dụ cụ thể máy trạm làm việc Client bình thường mạng LAN đồng thời đóng vai trò máy in chủ (printer server) cung cấp dịch vụ in ấn từ xa cho nhiều người khác (Clients) sử dụng Client hiểu bề dịch vụ mạng, có thơng tin vào chúng hiển thị máy Client 2.3 Server Server định nghĩa máy tính nhiều người sử dụng (multiuser computer) Vì Server phải quản lý nhiều yêu cầu từ Client mạng hoạt động tốt hệ điều hành đa nhiệm với tính hoạt động độc lập song song với hệ điều hành UNIX, WINDOWS Server cung cấp điều khiển tiến trình truy cập vào tài nguyên hệ thống Các ứng dụng chạy Server phải tách rời để lỗi ứng dụng khơng làm hỏng ứng dụng khác Tính đa nhiệm đảm bảo tiến trình khơng sử dụng toàn tài nguyên hệ thống Server nhà cung cấp dịch vụ cho Clients yêu cầu tới cần, dịch vụ sở liệu, in ấn, truyền file, hệ thống Các ứng dụng Server cung cấp dịch vụ mang tính chức để hỗ trợ cho hoạt động máy Clients có hiệu   Đồ án mơn học Lập trình mạng SV: Phạm Vũ Thoại – 09TC    Trang: 4  Mơ hình Client-Server chế chung Cớ chế chung: Kết nối gửi, nhận message   Đồ án mơn học Lập trình mạng SV: Phạm Vũ Thoại – 09TC    Trang: 5  Mơ hình   Đồ án mơn học Lập trình mạng SV: Phạm Vũ Thoại – 09TC    Trang: 6  Chương trình Server - Clients 4.1 Viết chương trình cho phía máy Server  Tạo Socket  Liên kết với IPEndPoint cục  Lắng nghe kết nối  Chấp nhận kết nối  Gửi nhận liệu theo giao thức thiết lập  Đóng kết nối sau hoàn thành vả trở lại trạng thái lắng nghe chờ kết nối //Khai báo thư viện tạo cấu trúc trỏ kiểu danh sách liên kết // stdafx.h : include file for standard system include files,  //  or project specific include files that are used frequently, but  //      are changed infrequently  //    #if !defined(AFX_STDAFX_H A9DB83DB_A9FD_11D0_BFD1_444553540000 INCLUDED_)  #define AFX_STDAFX_H A9DB83DB_A9FD_11D0_BFD1_444553540000 INCLUDED_    #if _MSC_VER > 1000  #pragma once  #endif // _MSC_VER > 1000    #define WIN32_LEAN_AND_MEAN   // Exclude rarely‐used stuff from Windows headers    #include   #include   #include   #include   #include   #include "resource.h"  #pragma comment (lib,"ws2_32.lib")  #pragma comment (lib,"comctl32.lib")  #define SERVERPORT 2000  #define IDCODE 200    typedef struct _tagLinkNode  {    char* pName;    sockaddr_in sinIPClient;    _tagLinkNode* next;  }LinkNode;    Đồ án mơn học Lập trình mạng SV: Phạm Vũ Thoại – 09TC    Trang: 7    // TODO: reference additional headers your program requires here    //{{AFX_INSERT_LOCATION}}  // Microsoft Visual C++ will insert additional declarations immediately before the  previous line.    #endif // !defined(AFX_STDAFX_H A9DB83DB_A9FD_11D0_BFD1_444553540000 INCLUDED_)    //Chương trình   // ServerChar 0971060.cpp : Defines the class behaviors for the application.  //    #include "stdafx.h"  HINSTANCE hAppHinst;  char buffer[MAX_PATH];  sockaddr_in sinServerAddr,ClntAddr;  hostent* pMyServer;  struct in_addr addr;  LV_ITEM lvItem;  int iRecv,iRow,iClntAddrLen,iResult;  u_long myIP;  SOCKET ListenSocket,ClientSocket,UpdateSocket;  BOOL bServerState;  HANDLE ServerThead;  HWND hAppHwnd;  LinkNode *found;  LV_FINDINFO lvf;  BOOL CALLBACK WndProc(HWND, UINT, WPARAM,LPARAM);  DWORD WINAPI WaitForClient(LPVOID );    int APIENTRY WinMain(HINSTANCE hInstance,                       HINSTANCE hPrevInstance,                       LPSTR     lpCmdLine,                       int       nCmdShow)  {    INITCOMMONCONTROLSEX InitCtrls;    InitCtrls.dwICC = ICC_INTERNET_CLASSES|ICC_LISTVIEW_CLASSES;    InitCtrls.dwSize = sizeof(INITCOMMONCONTROLSEX);    InitCommonControlsEx(&InitCtrls);        //khoi dong winsock     WSADATA SData;        if (WSAStartup(MAKEWORD(2,2),&SData))    {      MessageBox(NULL,"WSAStartup failed!",        "Client Chat",        MB_OK|MB_ICONSTOP);      return 1;      }    hAppHinst = hInstance;    //HICON m_hIcon;    //m_hIcon = AfxGetApp()‐>LoadIcon(IDI_ICON1);    static int iResult =  DialogBoxParam(hInstance,MAKEINTRESOURCE(IDD_DIALOG1),NULL,WndProc,0);    WSACleanup();    return iResult;    Đồ án mơn học Lập trình mạng SV: Phạm Vũ Thoại – 09TC    Trang: 8  }  /************************************************************************/  //danh sach lien ket  void InitLinkList(LinkNode** pHead)  {    *pHead = NULL;  }    LinkNode *InsertNode(LinkNode **pHead,char *ClientName,sockaddr_in ClientIP)  {    LinkNode *new_node,*curr_node = *pHead;        int len;    //tao mot node moi tro toi NULL de chen vao cuoi danh sach    new_node=(LinkNode *)GlobalAlloc(GMEM_ZEROINIT,sizeof(LinkNode));    new_node‐>pName =(char *)GlobalAlloc(GMEM_ZEROINIT,(len  =lstrlen(ClientName))+1);    strncpy(new_node‐>pName,ClientName,len);    new_node‐>sinIPClient = ClientIP;    new_node‐>next=*pHead; // them node moi vao dau danh sach    return (*pHead=new_node);  }  /************************************************************************/  //tim node dau tien co data phu hop  //tra ve vi tri tim duoc , khong tim thay tra ve NULL  LinkNode* FindByClientName(LinkNode *Head,char *ClientName)  {    while((Head)&&lstrcmp(Head‐>pName,ClientName))      Head = Head‐>next;      return Head;  }  /************************************************************************/  LinkNode* FindByClientIP(LinkNode *Head,sockaddr_in ClientIP)  {    while((Head)&&((Head‐>sinIPClient).sin_addr.s_addr!=ClientIP.sin_addr.s_addr))      Head = Head‐>next;      return Head;  }  /************************************************************************/  int DeleteByClientName(LinkNode **pHead,char *ClientName)  {    LinkNode *pPrevNode =NULL, *pCurrNode = *pHead;    while((pCurrNode)&&lstrcmp(pCurrNode‐>pName,ClientName))    {      pPrevNode = pCurrNode;      pCurrNode = pCurrNode‐>next;    }      if (pCurrNode)      {      if (pPrevNode)        pPrevNode‐>next= pCurrNode‐>next;      else        *pHead = pCurrNode‐>next;        GlobalFree(pCurrNode‐>pName);        GlobalFree(pCurrNode);    }      return 1;    return 0;  }  /************************************************************************/  int DeleteByClientIP(LinkNode **pHead,sockaddr_in ClientIP)  {    LinkNode *pPrevNode = NULL, *pCurrNode = *pHead;    Đồ án mơn học Lập trình mạng SV: Phạm Vũ Thoại – 09TC    Trang: 9    while((pCurrNode)&&((pCurrNode‐ >sinIPClient).sin_addr.s_addr!=ClientIP.sin_addr.s_addr))    {      pPrevNode = pCurrNode;      pCurrNode = pCurrNode‐>next;    }        if (pCurrNode)      {      if (pPrevNode)        pPrevNode‐>next= pCurrNode‐>next;      else        *pHead = (*pHead)‐>next;      GlobalFree(pCurrNode‐>pName);      GlobalFree(pCurrNode);      return 1;    }      return 0;  }  /************************************************************************/  void DestroyList(LinkNode **pHead)  {    LinkNode *pPrev;  while (*pHead)      {      pPrev = *pHead;      *pHead = (*pHead)‐>next;      GlobalFree(pPrev‐>pName);      GlobalFree(pPrev);    }  }  void UpdateListForClient(LinkNode *pListHead,LinkNode *StartNode)  {    char *pcBufferToSend;    DWORD len;    LinkNode *pUpdateNode,*pCurrNode;      for(pUpdateNode =StartNode;pUpdateNode;pUpdateNode = pUpdateNode‐>next)    {      UpdateSocket = socket(AF_INET,SOCK_STREAM,IPPROTO_IP);      if (UpdateSocket!=INVALID_SOCKET)      {        if(connect(UpdateSocket,(struct sockaddr*)&(pUpdateNode‐ >sinIPClient),sizeof(pUpdateNode‐>sinIPClient))!=SOCKET_ERROR)        {          pCurrNode = pListHead;          ZeroMemory(buffer,10);          strncpy(buffer,"Update",6);          *((DWORD*)(buffer+6)) = lstrlen(pCurrNode‐>pName);          iResult = send(ClientSocket,buffer,10,0);                    // lan luot gui tat ca cac nut con lai trong danh sach           for(;pCurrNode;pCurrNode = pCurrNode‐>next)          {              len = lstrlen(pCurrNode‐>pName);            pcBufferToSend =(char*)  GlobalAlloc(GMEM_ZEROINIT,8+len);            if(pcBufferToSend[0] = (pCurrNode‐>next!=NULL))//  con tiep              *((DWORD*)(pcBufferToSend+1)) =  lstrlen((pCurrNode‐>next)‐>pName); //xac dinh size cua phan tu ke tiep            else    Đồ án mơn học Lập trình mạng SV: Phạm Vũ Thoại – 09TC    Trang: 10        {          EnableWindow(GetDlgItem(hwndDlg,IDC_EDIT4),TRUE);          SetFocus(GetDlgItem(hwndDlg,IDC_EDIT4));        }        else         {          SendDlgItemMessage(hwndDlg,IDC_EDIT4,WM_SETTEXT,0,(LPARAM)"");          EnableWindow(GetDlgItem(hwndDlg,IDC_EDIT4),FALSE);        }        break;      case IDC_BUTTON2:         // nhan nut send           ConnectSocket = socket(AF_INET,SOCK_STREAM,IPPROTO_IP);           if (ConnectSocket!=INVALID_SOCKET)           {             if (connect(ConnectSocket,(struct  sockaddr*)&sinServerAddr,sizeof(sinServerAddr))!=SOCKET_ERROR)             {              ZeroMemory(buffer,6);              strncpy_s(buffer,"Messag",6);              send(ConnectSocket,buffer,6,0);                 if(iRecv =  GetWindowTextLength(GetDlgItem(hwndDlg,IDC_EDIT3)))               {                 hGetText =  GlobalAlloc(GMEM_ZEROINIT,iRecv+=2+GetWindowTextLength(GetDlgItem(hwndDlg,IDC_EDIT1))) ;                GetDlgItemText(hwndDlg,IDC_EDIT1,(LPSTR)hGetText,iRecv);                *((char*)((DWORD)hGetText+lstrlen((LPSTR)hGetText))) = ':';                                 GetDlgItemText(hAppHwnd,IDC_EDIT3,(LPSTR)((DWORD)hGetText+lstrlen((LPSTR)hGetTe xt)),iRecv);                 send(ConnectSocket,(char*)hGetText,iRecv,0);                 GlobalFree(hGetText);               }             }             closesocket(ConnectSocket);            SendDlgItemMessage(hAppHwnd,IDC_EDIT3,WM_SETTEXT,0,(LPARAM)"");            EnableWindow(GetDlgItem(hwndDlg,IDC_BUTTON2),FALSE);            SetFocus(GetDlgItem(hwndDlg,IDC_EDIT3));           }          break;      case IDC_BUTTON1:        if (bLogInState==FALSE)        {            // kiem tra dieu kien , truoc khi dang nhap          if(!GetWindowTextLength(GetDlgItem(hwndDlg,IDC_EDIT1)))            break;          if(((bPortChecked =  SendDlgItemMessage(hwndDlg,IDC_CHECK3,BM_GETCHECK,0,0))==BST_CHECKED)&&            (!GetWindowTextLength(GetDlgItem(hwndDlg,IDC_EDIT4))))            break;    Đồ án mơn học Lập trình mạng SV: Phạm Vũ Thoại – 09TC    Trang: 19          // thuc hien ket noi toi server          CreateThread(NULL,0, Connect2Server,NULL,0,&dwConnect);                }        else        {          if(FriendSocket!=INVALID_SOCKET)            closesocket(FriendSocket);          // gui tin hieu thoat          ZeroMemory(buffer,sizeof(buffer));          lstrcpy(buffer,"Signou");          ConnectSocket = socket(AF_INET,SOCK_STREAM,IPPROTO_IP);          if (ConnectSocket!=INVALID_SOCKET)          {            connect(ConnectSocket,(struct  sockaddr*)&sinServerAddr,sizeof(sinServerAddr));            send(ConnectSocket,buffer,lstrlen(buffer),0);            GetDlgItemText(hAppHwnd,IDC_EDIT1,buffer,sizeof(buffer));            send(ConnectSocket,buffer,lstrlen(buffer),0);            closesocket(ConnectSocket);          }    bLogInState= FALSE;                  //Sau khi dang xuat, thiet lap cac cua so hien thi           EnableWindow(GetDlgItem(hwndDlg,IDC_EDIT1),TRUE);          EnableWindow(GetDlgItem(hwndDlg,IDC_IPADDRESS1),TRUE);          EnableWindow(GetDlgItem(hwndDlg,IDC_CHECK3),TRUE);          SendMessage(hwndDlg,WM_COMMAND,(WPARAM)IDC_CHECK3,0);          SetDlgItemText(hwndDlg,IDC_BUTTON1,"&Log in");          SetDlgItemText(hwndDlg,IDC_EDIT3,"");          SendDlgItemMessage(hwndDlg,IDC_LIST1,LVM_DELETEALLITEMS,0,0);          EnableWindow(GetDlgItem(hwndDlg,IDC_BUTTON2),FALSE);          SendDlgItemMessage(hAppHwnd,IDC_EDIT5,WM_SETTEXT,0,(LPARAM)"Logged out");                }        break;      default:        return FALSE;      }      break;    default:      return FALSE;  }      return TRUE;  }  /************************************************************************/  DWORD WINAPI Connect2Server(LPVOID lpParameter)  {        //khoi tao socket    ConnectSocket = socket(AF_INET,SOCK_STREAM,IPPROTO_IP);    if(ConnectSocket==INVALID_SOCKET)      goto ONERROR;        // thiet lap IP     sinServerAddr.sin_family = AF_INET;    ZeroMemory(buffer,MAX_PATH);    GetDlgItemText(hAppHwnd,IDC_IPADDRESS1,buffer,sizeof(buffer)‐1);    sinServerAddr.sin_addr.s_addr = inet_addr(buffer);    Đồ án mơn học Lập trình mạng SV: Phạm Vũ Thoại – 09TC    Trang: 20    // thiet lap Port    if (bPortChecked==BST_CHECKED)      sinServerAddr.sin_port = GetDlgItemInt(hAppHwnd,IDC_EDIT4,NULL,FALSE);    else      sinServerAddr.sin_port =SERVERPORT;    // hien thi trang thai tren Dialog    SendDlgItemMessage(hAppHwnd,IDC_EDIT5,WM_SETTEXT,0,(LPARAM)"Connecting to  server  ");    EnableWindow(GetDlgItem(hAppHwnd,IDC_EDIT1),FALSE);    EnableWindow(GetDlgItem(hAppHwnd,IDC_IPADDRESS1),FALSE);    EnableWindow(GetDlgItem(hAppHwnd,IDC_EDIT4),FALSE);    EnableWindow(GetDlgItem(hAppHwnd,IDC_CHECK3),FALSE);    EnableWindow(GetDlgItem(hAppHwnd,IDC_BUTTON1),FALSE);        // bat dau ket noi toi server     if (connect(ConnectSocket,(struct  sockaddr*)&sinServerAddr,sizeof(sinServerAddr))==SOCKET_ERROR)    {  closesocket(ConnectSocket);      ONERROR:      ErrorState();       return 0;    }        // sau khi da ket noi thanh cong    //thiet lap cac trang thai hien thi     EnableWindow(GetDlgItem(hAppHwnd,IDC_BUTTON1),TRUE);    SetDlgItemText(hAppHwnd,IDC_BUTTON1,"&Log out");    SetFocus(GetDlgItem(hAppHwnd,IDC_EDIT3));    SendDlgItemMessage(hAppHwnd,IDC_EDIT5,WM_SETTEXT,0,(LPARAM)"Connected  Successfully");    bLogInState= TRUE;        // gui ten toi server      ZeroMemory(buffer,MAX_PATH);    GetDlgItemText(hAppHwnd,IDC_EDIT1,buffer,sizeof(buffer));    iRecv =7+GetWindowTextLength(GetDlgItem(hAppHwnd,IDC_EDIT1));  pcBufferToRecv =(char*) GlobalAlloc(GMEM_ZEROINIT,iRecv);      wsprintf(pcBufferToRecv,"Client%s",buffer);    send(ConnectSocket,pcBufferToRecv,iRecv,0);    GlobalFree(pcBufferToRecv);    // nhan lai IP    recv(ConnectSocket,(char*)&sinMyAddr,sizeof(sinMyAddr),0);    closesocket(ConnectSocket);// ket thuc giao dich khoi dau         //tao socket de nhan tin nhan     FriendSocket = socket(AF_INET,SOCK_STREAM,IPPROTO_IP);// khoi tao socket cho  MyIP    if (FriendSocket!=INVALID_SOCKET)    {      iRecv =  bind(FriendSocket,(struct  sockaddr*)&sinMyAddr,sizeof(sinMyAddr));      iRecv = listen(FriendSocket,SOMAXCONN);    // thuc hien cho thong diep toi      CreateThread(NULL,0,WaitForFriend,NULL,0,NULL);     }    return 0;      }  /*****************************************/  void AddText(char *buffer)  {    Đồ án mơn học Lập trình mạng SV: Phạm Vũ Thoại – 09TC    Trang: 21        HANDLE hBufferToPrint = GlobalAlloc(GMEM_ZEROINIT,lstrlen(buffer)+4);    wsprintf((LPSTR)hBufferToPrint,"%s%c%c",buffer,13,10);    int iTxtLen =1+GetWindowTextLength(GetDlgItem(hAppHwnd,IDC_EDIT2));    if(iTxtLen)    {      SendDlgItemMessage(hAppHwnd,IDC_EDIT2,EM_SETSEL,iTxtLen,iTxtLen);      SendDlgItemMessage(hAppHwnd,IDC_EDIT2,EM_REPLACESEL,0,(LPARAM)hBufferToPrint);    }    else    {      SendDlgItemMessage(hAppHwnd,IDC_EDIT2,WM_SETTEXT,0,(LPARAM)hBufferToPrint);    }        GlobalFree(hBufferToPrint);      }  DWORD WINAPI WaitForFriend(LPVOID parameter)  {    DWORD len;    int iResult;        iClntAddrLen = sizeof(sinClntAddr);    for (;bLogInState;)    {      Sleep(1);      ClntSocket = accept(FriendSocket,(struct  sockaddr*)&sinClntAddr,&iClntAddrLen);            if(ClntSocket!=SOCKET_ERROR)      {        ZeroMemory(buffer,sizeof(buffer));        iResult = recv(ClntSocket,buffer,10,0);        len=*((DWORD*)(buffer+6));          if(!strncmp((char*)buffer,"Update",6))        {          SendDlgItemMessage(hAppHwnd,IDC_LIST1,LVM_DELETEALLITEMS,0,0);          lvItem.mask= LVIF_TEXT;          lvItem.iSubItem = 0;          iRow = 0;          do           {            pcBufferToRecv =  (char*)GlobalAlloc(GMEM_ZEROINIT,8+len);            iResult = recv(ClntSocket,pcBufferToRecv,8+len,0);            lvItem.iItem = iRow++;            lvItem.pszText =(char*)(pcBufferToRecv+5);            SendDlgItemMessage(hAppHwnd,IDC_LIST1,LVM_SETITEM,0,(LPARAM)&lvItem);            SendDlgItemMessage(hAppHwnd,IDC_LIST1,LVM_INSERTITEM,0,(LPARAM)&lvItem);            len = *((DWORD*)(pcBufferToRecv+1));            bContRecv = BOOL(*pcBufferToRecv);            GlobalFree(pcBufferToRecv);          } while (bContRecv);                  }        else    Đồ án mơn học Lập trình mạng SV: Phạm Vũ Thoại – 09TC    Trang: 22        if(!strncmp((char*)buffer,"Messag",6))        {          ZeroMemory(buffer,sizeof(buffer));          recv(ClntSocket,buffer,sizeof(buffer)‐1,0);          AddText(buffer);        }          closesocket(ClntSocket);      }                }    return 0;  }    void GetList(DWORD a)  {    SendDlgItemMessage(hAppHwnd,IDC_LIST1,LVM_DELETEALLITEMS,0,0);    len = a;    lvItem.mask= LVIF_TEXT;    lvItem.iSubItem = 0;    iRow = 0;    do     {      pcBufferToRecv = (char*)GlobalAlloc(GMEM_ZEROINIT,8+len);  recv(ConnectSocket,pcBufferToRecv,8+len,0);          lvItem.iItem = iRow++;      lvItem.pszText =(char*)(pcBufferToRecv+5);      SendDlgItemMessage(hAppHwnd,IDC_LIST1,LVM_SETITEM,0,(LPARAM)&lvItem);      SendDlgItemMessage(hAppHwnd,IDC_LIST1,LVM_INSERTITEM,0,(LPARAM)&lvItem);      len = *((DWORD*)(pcBufferToRecv+1));      bContRecv = BOOL(*pcBufferToRecv);      GlobalFree(pcBufferToRecv);    } while (bContRecv);  }              Đồ án mơn học Lập trình mạng SV: Phạm Vũ Thoại – 09TC    Trang: 23  // Thiết kế form thuộc tính form   Đồ án mơn học Lập trình mạng SV: Phạm Vũ Thoại – 09TC    Trang: 24  Kết Demo chương trình Bước 1: Chạy tập tin ServerChat 0971060.exe Chạy nhiều tập tin ClientsChat 0971060.exe   Bước 2: Khởi động Server: nhấn button Start Server; chương trình lấy địa local host 127.0.0.1 máy port Bước 3: Khởi động Clients Nhập Nick name : THOAI / THAO Nhập địa IP Serser : 127.0.0.1 Kết nối tới máy chủ, nhấn button Login   Đồ án mơn học Lập trình mạng SV: Phạm Vũ Thoại – 09TC    Trang: 25  Kết sau Server khởi động Clients đăng nhập thành cơng   Đồ án mơn học Lập trình mạng SV: Phạm Vũ Thoại – 09TC    Trang: 26  Bước 4: Chat Clients với     Đồ án mơn học Lập trình mạng SV: Phạm Vũ Thoại – 09TC    Trang: 27      Đồ án mơn học Lập trình mạng SV: Phạm Vũ Thoại – 09TC    Trang: 28    Đồ án mơn học Lập trình mạng SV: Phạm Vũ Thoại – 09TC    Trang: 29    Đồ án mơn học Lập trình mạng SV: Phạm Vũ Thoại – 09TC    Trang: 30  KẾT LUẬN Hạn chế - Server gửi theo chế multicat - Client nhận tất gói tin từ Server gửi tới - Thiết kế chưa có nhiều tính ứng dụng - Chưa có chế bảo mật truyền liệu Hướng phát triển ứng dụng - Khắc phục hạn chế - Nghiên cứu thêm thuật toán tối ưu chế bảo mật   Đồ án mơn học Lập trình mạng SV: Phạm Vũ Thoại – 09TC    Trang: 31  TÀI LIỆU THAM KHẢO [1] Hệ tin học phân tán -Tiến sĩ Lê Văn Sơn, Nhà xuất ĐHQG Tp HCM2002 [2] Nguyễn Phương Lan- Hồng Đức Hải,lâp trình mạng, Nhà xuất Giáo dục [3] Nguyễn Thúc Hải, Mạng máy tính hệ thống mở, Nhà xuất Giáo dục [4] Đồn Văn Ban, Lập trình hướng đối tượng với C++, Nhà xuất Khoa học Kỹ thuật [5] Các viết tạp chí khoa học kỹ thuật lập trình mạng đăng tải mạng Internet [6] Darrel Ince & Adam Freemat, Programming the Internet with C++, Addison-Wesley [7] Elliotte Rusty Harold, C++ Network Programming [8] The Complete C++ 2Reference   Đồ án mơn học Lập trình mạng SV: Phạm Vũ Thoại – 09TC    Trang: 32  MỤC LỤC Những vấn đề mạng 1 Mạng máy tính 1.1 Thiết bị giao tiếp mạng (Network Interface Thiết bị) Mơ hình Client-Server 2.1 Giới thiệu 2.2 Client 2.3 Server Mơ hình Client-Server chế chung Chương trình Server - Clients 4.1 Viết chương trình cho phía máy Server 4.2 Viết chương trình cho phía máy Client 16 Kết Demo chương trình 25 Kết luận 31 Tài liệu tham khảo 32   Đồ án mơn học Lập trình mạng SV: Phạm Vũ Thoại – 09TC    Trang: 33  ... Trang: 26  Bước 4: Chat Clients với     Đồ án mơn học Lập trình mạng SV: Phạm Vũ Thoại – 09TC    Trang: 27      Đồ án mơn học Lập trình mạng SV: Phạm Vũ Thoại – 09TC    Trang: 28    Đồ án mơn học Lập trình mạng SV: Phạm Vũ Thoại – 09TC ...   }    Đồ án mơn học Lập trình mạng SV: Phạm Vũ Thoại – 09TC    Trang: 14                }    break;  default:    return FALSE;  }  return TRUE;  // Thiết kế form thuộc tính form   Đồ án mơn học Lập trình mạng SV: Phạm Vũ Thoại – 09TC ... GlobalFree(pcBufferToRecv);    } while (bContRecv);  }              Đồ án mơn học Lập trình mạng SV: Phạm Vũ Thoại – 09TC    Trang: 23  // Thiết kế form thuộc tính form   Đồ án mơn học Lập trình mạng SV: Phạm Vũ Thoại – 09TC 

Ngày đăng: 23/11/2017, 07:15

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan