聊天室——TCPIP原理及編程課程設(shè)計(jì)報(bào)告_第1頁(yè)
聊天室——TCPIP原理及編程課程設(shè)計(jì)報(bào)告_第2頁(yè)
聊天室——TCPIP原理及編程課程設(shè)計(jì)報(bào)告_第3頁(yè)
聊天室——TCPIP原理及編程課程設(shè)計(jì)報(bào)告_第4頁(yè)
聊天室——TCPIP原理及編程課程設(shè)計(jì)報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩12頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、TCPIP 原理及編程課程設(shè)計(jì)報(bào)告課 程 設(shè) 計(jì) 報(bào) 告 書(shū)題 目: 局域網(wǎng)聊天室 專 業(yè): 網(wǎng)絡(luò)工程 班 級(jí): 一班 學(xué)生姓名: 賀* 學(xué) 號(hào): 2013* 指導(dǎo)教師: 李* 完成日期: 2016 年 6 月 11 日 局域網(wǎng)聊天室TCPIP 原理及編程課程設(shè)計(jì)報(bào)告目目 錄錄一、任務(wù)概述一、任務(wù)概述.11.1 設(shè)計(jì)目的.11.2 項(xiàng)目背景.1二、系統(tǒng)需求分析和概要設(shè)計(jì)二、系統(tǒng)需求分析和概要設(shè)計(jì) .12.1 需求分析.12.1.1 服務(wù)器端工作流程.12.1.2 客戶端工作流程.12.2 用例設(shè)計(jì).22.3 整體框架設(shè)計(jì).52.4 模塊設(shè)計(jì).5三、系統(tǒng)詳細(xì)設(shè)計(jì)三、系統(tǒng)詳細(xì)設(shè)計(jì).63.1 服務(wù)器

2、.63.2 客戶端.123.3 主界面 .14四、總結(jié)四、總結(jié).15局域網(wǎng)聊天室TCPIP 原理及編程課程設(shè)計(jì)報(bào)告1一、任務(wù)概述一、任務(wù)概述1.1 設(shè)計(jì)目的設(shè)計(jì)目的本課題是建立聊天通信模型,設(shè)計(jì)一個(gè)聊天室軟件,包括服務(wù)器端和客戶端,通過(guò)選擇類型決定是服務(wù)器還是客戶端。服務(wù)器端功能:初始化 Socket,創(chuàng)建服務(wù)器端,向用戶發(fā)出響應(yīng)命令??蛻舳斯δ埽哼B接服務(wù)器,消息框中輸入消息,當(dāng)按下“發(fā)送消息”按鈕時(shí)將信息發(fā)送給服務(wù)器。通本課題的課程設(shè)計(jì),可以比較深入的了解和掌握 Winsock 控件基本屬性、方法和事件,理解網(wǎng)絡(luò)聊天通信的概念,使用傳輸控制協(xié)議(TCP)進(jìn)行數(shù)據(jù)交流,初步掌握網(wǎng)絡(luò)聊天通信程序

3、的設(shè)計(jì)方法。并能鞏固和擴(kuò)展大學(xué)期間的學(xué)習(xí)內(nèi)容,進(jìn)行項(xiàng)目的設(shè)計(jì)開(kāi)發(fā)訓(xùn)練,更好的適應(yīng)社會(huì)的需求。1.2 項(xiàng)目背景項(xiàng)目背景 聊天室程序一般都是以服務(wù)器提供服務(wù)端連接響應(yīng),使用者通過(guò)客戶端程序連接到服務(wù)器,就可以與在同一服務(wù)器上的用戶交談,這是一個(gè)面向連接的通信過(guò)程。因此,程序要在 TCP/IP 環(huán)境下,實(shí)現(xiàn)服務(wù)器端和客戶端兩部分程序。二、系統(tǒng)需求分析和概要設(shè)計(jì)二、系統(tǒng)需求分析和概要設(shè)計(jì)2.1 需求分析需求分析 2.1.1 服務(wù)器端工作流程服務(wù)器端工作流程服務(wù)器端通過(guò)系統(tǒng)調(diào)用創(chuàng)建一個(gè) Socket 數(shù)組后(即設(shè)定了接受連接客戶的最大數(shù)目),與指定的本地端口綁定 bind(),就可以在端口進(jìn)行監(jiān)聽(tīng) li

4、sten。如果有客戶端連接請(qǐng)求,則在數(shù)組中選擇一個(gè)空 Socket,將客戶端地址賦給這個(gè) Socket。然后登客戶端的用戶就可以在服務(wù)器上聊天了。2.1.2 客戶端工作流程客戶端工作流程客戶端程序相對(duì)簡(jiǎn)單,只需要建立一個(gè) Socket 與服務(wù)器端連接,成功后通過(guò)這個(gè)Socket 來(lái)發(fā)送和接收數(shù)據(jù)就可以了。局域網(wǎng)聊天室TCPIP 原理及編程課程設(shè)計(jì)報(bào)告22.2 用例設(shè)計(jì)用例設(shè)計(jì) 通常來(lái)說(shuō),一個(gè)用例對(duì)應(yīng)一個(gè)功能,即程序的一個(gè)執(zhí)行路徑或執(zhí)行流程。本程序主 要有以下幾個(gè)用例:服務(wù)器運(yùn)行、客戶端運(yùn)行,服務(wù)器端發(fā)送消息,客戶端發(fā)送信息,服務(wù)器端接收消息,客戶端接收信息,服務(wù)器端停止服務(wù),客戶端退出連接,服

5、務(wù)器端關(guān)閉,客戶端關(guān)閉。 1、 服務(wù)器運(yùn)行 表 2-1 服務(wù)器運(yùn)行用例主路徑可選路徑1、運(yùn)行程序,顯示主窗口2、點(diǎn)擊“網(wǎng)絡(luò)設(shè)置”按鈕,點(diǎn)擊服務(wù)器選項(xiàng),設(shè)置監(jiān)聽(tīng)端口,開(kāi)啟服務(wù)器3、開(kāi)啟失敗,重新開(kāi)啟4、開(kāi)啟服務(wù)器成功4.1 提示用戶,服務(wù)器啟動(dòng)成功4.2 進(jìn)行通信4、開(kāi)啟服務(wù)器成功4.1 提示用戶,開(kāi)啟服務(wù)器成功4.2 進(jìn)行通信2、客戶端運(yùn)行表 2-2 客戶端運(yùn)行用例主路徑可選路徑1、運(yùn)行程序,顯示主窗口2、點(diǎn)擊“網(wǎng)絡(luò)設(shè)置”按鈕,點(diǎn)擊客戶端選項(xiàng),設(shè)置服務(wù)器 IP、服務(wù)器端口,連接服務(wù)器服務(wù)器3、連接失敗,重新連接4、連接服務(wù)器成功4.1 提示用戶,連接服務(wù)器成功4.2 告知服務(wù)器,客戶端進(jìn)入聊天

6、室4.3 進(jìn)行通信4、連接服務(wù)器成功4.1 提示用戶,連接服務(wù)器成功4.2 告知服務(wù)器,客戶端進(jìn)入聊天室4.3 進(jìn)行通信3、服務(wù)器端發(fā)送消息表 2-3 服務(wù)器端發(fā)送聊天信息用例局域網(wǎng)聊天室TCPIP 原理及編程課程設(shè)計(jì)報(bào)告3主路徑可選路徑1、輸入聊天消息2、點(diǎn)擊“發(fā)送消息”按鈕,發(fā)送消息2、沒(méi)有輸入消息, “發(fā)送消息”按鈕不可用,重新輸入消息3、顯示消息3.1 服務(wù)器端顯示發(fā)送的消息3.2 客戶端顯示發(fā)送的消息4、客戶端發(fā)送聊天信息 表 2-4 客戶端發(fā)送聊天信息用例主路徑可選路徑1、輸入聊天消息2、點(diǎn)擊“發(fā)送消息”按鈕,發(fā)送消息2、沒(méi)有輸入消息, “發(fā)送消息”按鈕不可用,重新輸入消息3、顯示

7、消息3.1 客戶端顯示發(fā)送的消息3.2 服務(wù)器端顯示發(fā)送的消息5、 服務(wù)器端接收聊天信息 表 2-5 服務(wù)器端接收聊天信息用例主路徑可選路徑1、服務(wù)器端接收聊天消息2、顯示接收的聊天消息6、 客戶端接收聊天信息 表 2-6 客戶端接收聊天信息用例主路徑可選路徑1、客戶端接收聊天消息2、顯示接收聊天消息局域網(wǎng)聊天室TCPIP 原理及編程課程設(shè)計(jì)報(bào)告47、 服務(wù)器端停止服務(wù)表 2-7 服務(wù)器端停止服務(wù)用例主路徑可選路徑1、點(diǎn)擊“停止”按鈕,彈出對(duì)話框,點(diǎn)擊“確定” ,停止服務(wù)1、點(diǎn)擊“停止”按鈕,彈出對(duì)話框,點(diǎn)擊“取消” ,服務(wù)器正常工作2、顯示停止成功消息8、 客戶端退出連接表 2-8 客戶端退

8、出連接用例主路徑可選路徑1、點(diǎn)擊“退出”按鈕,彈出對(duì)話框,點(diǎn)擊“確定” ,退出連接1、點(diǎn)擊“停止”按鈕,彈出對(duì)話框,點(diǎn)擊“取消” ,客戶端正常連接2、顯示連接成功消息9、 服務(wù)器端關(guān)閉 表 2-9 服務(wù)器端關(guān)閉用例主路徑可選路徑1、點(diǎn)擊“關(guān)閉窗口”按鈕,彈出對(duì)話框,點(diǎn)擊“確定” ,退出系統(tǒng)1、點(diǎn)擊“關(guān)閉窗口”按鈕,彈出對(duì)話框,點(diǎn)擊“取消” ,系統(tǒng)正常工作10、 客戶端關(guān)閉 表 2-10 客戶端關(guān)閉用例主路徑可選路徑1、點(diǎn)擊“關(guān)閉窗口”按鈕,彈出對(duì)話框,點(diǎn)擊“確定” ,退出系統(tǒng)1、點(diǎn)擊“關(guān)閉窗口”按鈕,彈出對(duì)話框,點(diǎn)擊“取消” ,系統(tǒng)正常工作局域網(wǎng)聊天室TCPIP 原理及編程課程設(shè)計(jì)報(bào)告52.3

9、 整體框架設(shè)計(jì)整體框架設(shè)計(jì) 結(jié)合自己的編程經(jīng)驗(yàn),設(shè)計(jì)出的聊天模式如下所示。 圖 2-1 聊天模式 如上圖所示,服務(wù)器與客戶端之間采用 TCP/IP 協(xié)議通信。服務(wù)器提供服務(wù),保存用戶列表,并能進(jìn)行廣播通信。服務(wù)器持續(xù)保持對(duì)端口的監(jiān)聽(tīng)狀態(tài),每當(dāng)有客戶端連接服務(wù)器時(shí),服務(wù)器保存客戶端的 IP 和端口。2.4 模塊設(shè)計(jì)模塊設(shè)計(jì) 2.4.1 服務(wù)器 服務(wù)器端流程圖如下。 圖 2.2 服務(wù)器流程圖 開(kāi)始運(yùn)行服務(wù)器監(jiān)聽(tīng)端口消息接收連接請(qǐng)求接收數(shù)據(jù)關(guān)閉連接結(jié)束服務(wù)器客戶端客戶端局域網(wǎng)聊天室TCPIP 原理及編程課程設(shè)計(jì)報(bào)告62.4.2 客戶端 客戶端流程圖如下。圖 2.3 客戶端流程圖三、系統(tǒng)詳細(xì)設(shè)計(jì)三、系

10、統(tǒng)詳細(xì)設(shè)計(jì)3.1 服務(wù)器服務(wù)器 (1)通過(guò) AppWizard 生成基于對(duì)話框的應(yīng)用程序 ChatRooms,在向?qū)У牡诙竭x擇WindowsSockets 的支持,其余步驟均用默認(rèn)值。 (2)刪除原有控件,增加如下控件:控件類型控件類型控件控件 IDID控件類型控件類型控件控件 IDIDGroup boxIDC_STATIC_ALLStatic TextIDC_STATIC_SERVER_PORTGroup boxIDC_STATIC1Static TextIDC_STATIC_local_portGroup boxIDC_STATIC2ButtonIDC_netsetEdit Contro

11、lIDC_EDIT_message_recordButtonIDC_send_message開(kāi)始運(yùn)行客戶端建立連接發(fā)送數(shù)據(jù)關(guān)閉連接結(jié)束局域網(wǎng)聊天室TCPIP 原理及編程課程設(shè)計(jì)報(bào)告7控件類型控件類型控件控件 ID控件類型控件類型控件控件 IDEdit ControlIDC_input_messageButtonIDC_close_windowsEdit ControlIDC_server_portButtonIDC_lianjie_serverEdit ControlIDC_EDIT4_local_portButtonIDC_exitStatic TextIDC_STATIC_setnetBu

12、ttonIDC_start_serverStatic TextIDC_STATIC_server_ipButton IDC_stopRadio buttonIDC_RADIO1_clientRadio buttonIDC_RADIO1_serverIp Address ControlIDC_IPADDRESS1(3)定義全局變量及函數(shù)void DlgAllInit();afx_msg void OnBnClickedRadio1client();afx_msg void OnBnClickedRadio1server();CButton m_radio_client;CButton m_rad

13、io_server;CButton m_stop_btn;void ExtendDiaog(BOOL bshow);afx_msg void OnBnClickednetset();BOOL bShowALL;afx_msg void OnBnClickedlianjieserver();SOCKET m_ListenSock;SOCKET m_ConnectSock;afx_msg void OnBnClickedstartserver();HANDLE m_hListenThread;HANDLE m_ConnectThread;CArray m_ClientArray;CEdit m_M

14、sgEdit;void ShowMsg(CString strMsg);void CChatRoomsDlg:RemoveClientFromArray(CClientItem in_Item);afx_msg void OnBnClickedsendmessage();void SendClientsMsg(CString strMsg, CClientItem *pNotSend=NULL);int m_bIsServer;int showButton;int showButton1;afx_msg void OnEnChangeinputmessage();void StopClient

15、();BOOL bShutDown;void StopServer();afx_msg void OnBnClickedexit();afx_msg void OnBnClickedstop();afx_msg void OnBnClickedclosewindows();(4)系統(tǒng)初始化void CChatRoomsDlg:DlgAllInit()局域網(wǎng)聊天室TCPIP 原理及編程課程設(shè)計(jì)報(bào)告8m_stop_btn.EnableWindow(FALSE);CheckRadioButton(IDC_RADIO1_client,IDC_RADIO1_server,IDC_RADIO1_clien

16、t);SetDlgItemText(IDC_IPADDRESS1,_T(127.0.0.1);SetDlgItemText(IDC_server_port,_T(12580);SetDlgItemText(IDC_EDIT4_local_port,_T(12580);GetDlgItem(IDC_send_message)-EnableWindow(FALSE);GetDlgItem(IDC_stop)-EnableWindow(FALSE);GetDlgItem(IDC_STATIC_local_port)-EnableWindow(FALSE);GetDlgItem(IDC_EDIT4_l

17、ocal_port)-EnableWindow(FALSE);GetDlgItem(IDC_start_server)-EnableWindow(FALSE);(5)服務(wù)器初始化void CChatRoomsDlg:OnBnClickedRadio1server()CheckRadioButton(IDC_RADIO1_client,IDC_RADIO1_server,IDC_RADIO1_server);GetDlgItem(IDC_STATIC_local_port)-EnableWindow(TRUE);GetDlgItem(IDC_EDIT4_local_port)-EnableWin

18、dow(TRUE);GetDlgItem(IDC_start_server)-EnableWindow(TRUE);GetDlgItem(IDC_stop)-EnableWindow(TRUE);GetDlgItem(IDC_STATIC_server_ip)-EnableWindow(FALSE);GetDlgItem(IDC_IPADDRESS1)-EnableWindow(FALSE);GetDlgItem(IDC_STATIC_SERVER_PORT)-EnableWindow(FALSE);GetDlgItem(IDC_server_port)-EnableWindow(FALSE)

19、;GetDlgItem(IDC_lianjie_server)-EnableWindow(FALSE);GetDlgItem(IDC_exit)-EnableWindow(FALSE);GetDlgItem(IDC_stop)-EnableWindow(FALSE);(6)給消息輸入框設(shè)定變量,其代碼如下: void CChatRoomsDlg:OnEnChangeinputmessage()CString strMsg;GetDlgItemText(IDC_input_message,strMsg);if(strMsg.IsEmpty() GetDlgItem(IDC_send_messag

20、e)-EnableWindow(FALSE);else GetDlgItem(IDC_send_message)-EnableWindow(TRUE);(7)給消息記錄框定義全局變量,其代碼如下:CEdit m_MsgEdit;(8)設(shè)置網(wǎng)絡(luò)設(shè)置void CChatRoomsDlg:OnBnClickednetset()if(bShowALL) ExtendDiaog(FALSE);局域網(wǎng)聊天室TCPIP 原理及編程課程設(shè)計(jì)報(bào)告9else ExtendDiaog(TRUE); (9) “開(kāi)啟服務(wù)器”按鈕,其代碼如下:void CChatRoomsDlg:OnBnClickedstartserv

21、er()m_hListenThread=CreateThread(NULL,0,ListenThreadFunc,this,0,NULL);if(m_hListenThread & showButton1) GetDlgItem(IDC_start_server)-EnableWindow(FALSE);GetDlgItem(IDC_stop)-EnableWindow(TRUE);(10)監(jiān)聽(tīng)請(qǐng)求DWORD WINAPI ListenThreadFunc(LPVOID pParam)CChatRoomsDlg *pChatRoom = (CChatRoomsDlg *)pParam;

22、ASSERT(pChatRoom != NULL);pChatRoom-m_ListenSock = socket(AF_INET , SOCK_STREAM , IPPROTO_TCP);if ( pChatRoom-m_ListenSock = INVALID_SOCKET ) AfxMessageBox(_T(新建Socket失??!);return FALSE;int iPort = pChatRoom-GetDlgItemInt(IDC_EDIT4_local_port);if ( iPort 65535 ) AfxMessageBox(_T(請(qǐng)輸入合適的端口:1 - 65535);g

23、oto _Error_End;sockaddr_in service;service.sin_family = AF_INET;service.sin_addr.s_addr = INADDR_ANY;service.sin_port = htons(iPort);if ( bind(pChatRoom-m_ListenSock, (sockaddr*)&service, sizeof(sockaddr_in) = SOCKET_ERROR ) AfxMessageBox(_T(綁定端口失??!);goto _Error_End;if( listen(pChatRoom-m_Listen

24、Sock, 5) = SOCKET_ERROR ) AfxMessageBox(_T(監(jiān)聽(tīng)失??!);goto _Error_End;pChatRoom-m_bIsServer = TRUE;pChatRoom-showButton1 = TRUE;pChatRoom-ShowMsg(_T(系統(tǒng)信息:?jiǎn)?dòng)服務(wù)器成功!);while( TRUE & !(pChatRoom-bShutDown) ) if ( SOCKET_Select(pChatRoom-m_ListenSock, 100, TRUE) ) 局域網(wǎng)聊天室TCPIP 原理及編程課程設(shè)計(jì)報(bào)告10sockaddr_in clie

25、ntAddr;int iLen = sizeof(sockaddr_in);SOCKET accSock = accept(pChatRoom-m_ListenSock, (struct sockaddr *)&clientAddr , &iLen);if (accSock = INVALID_SOCKET) continue;CClientItem tItem;tItem.m_Socket = accSock;tItem.m_pMainWnd = pChatRoom;tItem.m_strIp = inet_ntoa(clientAddr.sin_addr);INT_PTR

26、idx = pChatRoom-m_ClientArray.Add(tItem);tItem.hThread = CreateThread(NULL, 0, ClientThreadProc, &(pChatRoom-m_ClientArray.GetAt(idx), CREATE_SUSPENDED, NULL);pChatRoom-m_ClientArray.GetAt(idx).hThread = tItem.hThread;ResumeThread(tItem.hThread);CString strMsg;strMsg = _T(客戶端:) + tItem.m_strIp +

27、 _T( 進(jìn)入聊天室!);pChatRoom-ShowMsg(strMsg);pChatRoom-SendClientsMsg(strMsg, &tItem);Sleep(100);_Error_End:closesocket(pChatRoom-m_ListenSock);return TRUE;(11)連接超時(shí)BOOL SOCKET_Select(SOCKET hSocket, int nTimeOut, BOOL bRead)fd_set fdset;timeval tv;FD_ZERO(&fdset);FD_SET(hSocket, &fdset);nTimeO

28、ut = nTimeOut 1000 ? 1000 : nTimeOut;tv.tv_sec = 0;tv.tv_usec = nTimeOut;int iRet = 0;if ( bRead ) iRet = select(0, &fdset, NULL , NULL, &tv);elseiRet = select(0, NULL , &fdset, NULL, &tv);if(iRet ) + strMsg;ShowMsg(strMsg);SendClientsMsg(strMsg);else if (m_bIsServer = FALSE) CString

29、 strTmp = _T(本地客戶端:) + strMsg;ShowMsg(strTmp);int iSend = send(m_ConnectSock, (char *)strMsg.GetBuffer(), strMsg.GetLength()*sizeof(TCHAR), 0);strMsg.ReleaseBuffer();elseAfxMessageBox(_T(請(qǐng)先進(jìn)入聊天室!);SetDlgItemText(IDC_input_message, _T();(13)顯示消息,其代碼如下:void CChatRoomsDlg:ShowMsg(CString strMsg)m_MsgEd

30、it.SetSel(-1, -1);m_MsgEdit.ReplaceSel(strMsg+_T(rn);(14)“停止”按鈕,其代碼如下:void CChatRoomsDlg:OnBnClickedstop()INT iRet = MessageBox(_T(你真的確定停止嗎?),0,MB_OKCANCEL);if(iRet = IDOK) StopServer();ShowMsg(_T(服務(wù)器停止成功!);GetDlgItem(IDC_start_server)-EnableWindow(TRUE);GetDlgItem(IDC_stop)-EnableWindow(FALSE);(15)

31、關(guān)閉窗口void CChatRoomsDlg:OnBnClickedclosewindows()局域網(wǎng)聊天室TCPIP 原理及編程課程設(shè)計(jì)報(bào)告12INT yes_no = MessageBox(_T(是否退出程序?),0,MB_OKCANCEL);if(yes_no = IDOK) MessageBox(_T(謝謝您的使用!);AfxGetMainWnd()-SendMessage(WM_CLOSE);3.2 客戶端客戶端(1)客戶端步驟與服務(wù)器的步驟(1)-(4)相同。(2)客戶端初始化void CChatRoomsDlg:OnBnClickedRadio1client()CheckRadi

32、oButton(IDC_RADIO1_client,IDC_RADIO1_server,IDC_RADIO1_client);GetDlgItem(IDC_STATIC_local_port)-EnableWindow(FALSE);GetDlgItem(IDC_EDIT4_local_port)-EnableWindow(FALSE);GetDlgItem(IDC_start_server)-EnableWindow(FALSE);GetDlgItem(IDC_stop)-EnableWindow(FALSE);GetDlgItem(IDC_STATIC_server_ip)-EnableW

33、indow(TRUE);GetDlgItem(IDC_IPADDRESS1)-EnableWindow(TRUE);GetDlgItem(IDC_STATIC_SERVER_PORT)-EnableWindow(TRUE);GetDlgItem(IDC_server_port)-EnableWindow(TRUE);GetDlgItem(IDC_lianjie_server)-EnableWindow(TRUE); (3)與服務(wù)器步驟(6)-(8)相同。(4)“連接服務(wù)器”按鈕,其代碼如下:void CChatRoomsDlg:OnBnClickedlianjieserver()m_Conne

34、ctThread=CreateThread(NULL,0,ConnectThreadFunc,this,0,NULL);(5)連接服務(wù)器,其代如下:DWORD WINAPI ConnectThreadFunc(LPVOID pParam)CChatRoomsDlg *pChatRoom = (CChatRoomsDlg *)pParam;ASSERT(pChatRoom != NULL);pChatRoom-m_ConnectSock = socket(AF_INET , SOCK_STREAM , IPPROTO_TCP);if ( pChatRoom-m_ConnectSock = INV

35、ALID_SOCKET ) AfxMessageBox(_T(新建Socket失敗!);return FALSE;CString strServIp;pChatRoom-GetDlgItemText(IDC_IPADDRESS1, strServIp);局域網(wǎng)聊天室TCPIP 原理及編程課程設(shè)計(jì)報(bào)告13int iPort = pChatRoom-GetDlgItemInt(IDC_server_port);if ( iPort 65535 ) AfxMessageBox(_T(請(qǐng)輸入合適的端口:1 - 65535);goto _Error_End;char szIpAddr16 = 0;USE

36、S_CONVERSION;strcpy_s(szIpAddr, 16, T2A(strServIp);sockaddr_in server;server.sin_family = AF_INET;server.sin_port = htons(iPort);server.sin_addr.s_addr = inet_addr(szIpAddr);if ( connect(pChatRoom-m_ConnectSock, (struct sockaddr *)&server, sizeof(struct sockaddr) = SOCKET_ERROR ) AfxMessageBox(_T(連接失敗,請(qǐng)重試!);goto _Error_End;pChatRoom-m_bIsServer = FALSE;pChatRoom-showButton = TRUE;pChatRoom-GetDlgItem(IDC_lianjie_server)-EnableWindow(FALSE);pChatRoom-GetDlgItem(IDC_exit)-EnableWindow(

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論