日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

MFC网络通信程序设计——网络聊天室

發布時間:2023/12/31 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MFC网络通信程序设计——网络聊天室 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

網絡聊天室的設計與實現的具體功能要求如下:

  • 聊天室服務器端的創建。
  • 聊天室客戶端的創建。
  • 實現客戶與服務器的連接并通信。
  • 實現客戶端的實時更新聊天室信息。
  • 實現服務器端當前在線多客戶信息。(還未實現)
  • 實現聊天室里的所有用戶實時共享信息。
  • https://download.csdn.net/download/weixin_48453983/13755183

    服務器

    CaptionID
    服務啟動IDOK
    退出服務IDCANCEL
    發送IDC_BUTTON1

    客戶機

    CaptionID
    進入聊天室IDOK
    退出聊天室IDCANCEL
    發送IDC_SEND

    消息實現

    • 服務啟動:
      創建(socket)綁定(bind)套接字ServerSocket,WSAAsyncSelect設置ServerSocket異步模式,監聽客戶連接請求(listen),建立一個客戶接收請求的鏈表結點。
    • 發送:
      循環遍歷客戶鏈表發送(send)字符串(buff)給連接的客戶機
    LRESULT CTestDlg::OnAccept(WPARAM wParam, LPARAM lParam) //FD_ACCEPT有連接請求達到,獲取請求連接的客戶機,并添加到鏈表中 {if (WSAGETSELECTERROR(lParam)){list.InsertString(0,"Error detected on entry into OnServerAccept.");return 0L;}int nlen=sizeof(SockAddr);if(WSAGETSELECTEVENT(lParam) == FD_ACCEPT)//如果{SOCKET CLIENT= INVALID_SOCKET;//獲取請求連接的客戶機SOCKET client;//用于找連接鏈表中的客戶機Client->next->date=accept(ServerSocket,(LPSOCKADDR)&SockAddr,&nlen); //改:定義一個socket接受 找是否存在鏈表中,不存在則添加到鏈表if (Client->next->date == INVALID_SOCKET){list.InsertString(0,"Server socket failed to accept connection.");return 0L;}ListInsert(Client, 1, CLIENT);GetElem(Client, 2, client);WSAAsyncSelect(client,m_hWnd,WM_CLIENT_READCLOSE,FD_READ|FD_CLOSE);IsTrue = TRUE;}return 0L; } LRESULT CTestDlg::OnReadClose(WPARAM wParam, LPARAM lParam) //FD_READ有數據可讀,recv接收某一客戶機發來的數據,并send遍歷發送給所有的連接的客戶機(廣播) //FD_CLOSE有客戶機關閉,還未實現刪除關閉連接的客戶結點 { CString str1;switch (WSAGETSELECTEVENT(lParam)){case FD_READ:for (int j = 0; j < ListLength(Client); j++) {SOCKET client = visit(Client, j);if (recv(client, buff, sizeof(buff), 0) != SOCKET_ERROR){IsTrue = TRUE;break;}for (int j = 0; j < ListLength(Client); j++) {send(visit(Client, j), buff, sizeof(buff), 0); }break;case FD_CLOSE:break;}return 0L; }

    • 進入聊天室:
      創建窗口輸入服務器IP,創建套接字,連接(connect)服務器,連接成功發送“用戶名+進入聊天室,大家歡迎!”至服務器,WSAAsyncSelect設置異步。
    LRESULT CClientTestDlg::OnReadClose(WPARAM wParam,LPARAM lParam) //FD_READ 有消息可讀,revc接收消息,并顯示在窗口 //FD_CLOSE 服務器退出,closesocket(ServerSocket),并顯示在窗口 {CString str;switch (WSAGETSELECTEVENT(lParam)){case FD_READ:if(recv(ServerSocket,buff,sizeof(buff),0) == SOCKET_ERROR){list.InsertString(0,"接收數據發生錯誤。");return 0L;}str.Format("%s",buff);list.InsertString(0,str);break;case FD_CLOSE:closesocket(ServerSocket);list.InsertString(0,"服務器退出?!芾韱T已關閉聊天室");IsTrue = FALSE;break;}return 0L; } BOOL CClientTestDlg::DestroyWindow() //關閉窗口,則發送“用戶名+退出聊天室”至服務器。 {strcpy(buff, (LPCTSTR)(StrCname + "退出聊天室"));send(ServerSocket, buff, sizeof(buff), 0);WSACleanup();return CDialog::DestroyWindow(); }

    本程序只實現了基本的多人聊天功能,還有很多的功能都沒有能力實現,歡迎大家提出更好的想法和改進的方案~~

    總結

    以上是生活随笔為你收集整理的MFC网络通信程序设计——网络聊天室的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。