資源簡介
根據給定C++程序(client.cpp和server.cpp),學習和練習socket編程。基于兩個給定的C++程序,實現基于IP地址和端口號的聊天應用程序。具體實現要求如下:1. 在本地機器上編譯運行client.cpp和server.cpp程序,逐條回答程序注釋中的問題,學習理解socket編程的主要函數及相關操作。2. 對client.cpp和server.cpp進行整合和改進,使得程序能夠在一個顯示窗口中同時顯示發送的消息和收到的消息,并說明你是如何設計和實現這種功能的?3. 原始的client.cpp和server.cpp將發送端IP和端口號寫入到程序內容,對于使用并不十分方便,如果通過界面或終端輸入,實現發送端IP地址和端口號的靈活設置?類似的,如何設置自己的服務程序偵聽的端口號?回答上述問題,并在2的程序基礎上改進程序,實現這些功能。4. 如何利用改寫好的程序實現局域網內的廣播?寫出你的方法,并和周圍周圍同學溝通驗證這一功能。用自己的電腦截圖說明該功能的實現。5. 設計實施更為友善合理的用戶交互界面。6. 小組成員新增功能。
代碼片段和文件信息
#include?
#include?
#include?
#include
#include
#include
using?namespace?std;
#pragma?comment(lib?“ws2_32.lib“)?
#pragma?comment(lib?“IPHLPAPI.lib“)
#define?MALLOC(x)?HeapAlloc(GetProcessHeap()?0?(x))??
#define?FREE(x)?HeapFree(GetProcessHeap()?0?(x))??
DWORD?receiverMark?;//?接收消息者線程標識符?獲取IP信息
int?GetIpAddrTableFunction()??
{??
????PMIB_IPADDRTABLE?pIPAddrTable;??//?網絡接口與IP地址映射表??
????DWORD?dwSize?=?0;???????????????//?獲取數據的大小??
????DWORD?dwRetVal?=?0;?????????????//?調用GetIPAddrTable()函數的返回值??
????IN_ADDR?IPAddr;?????????????????//?保存IP地址的結構體??
????LPVOID?lpMsgBuf;????????????????//?用于獲取錯誤信息??
??
????//?分配內存空間??
????pIPAddrTable?=?(MIB_IPADDRTABLE?*)?MALLOC(sizeof?(MIB_IPADDRTABLE));??
????//?第1次調用GetIpAddrTable()函數,獲取數據的大小到dwSize??
????if?(pIPAddrTable)?{??
????????if?(GetIpAddrTable(pIPAddrTable?&dwSize?0)?==??ERROR_INSUFFICIENT_BUFFER)?{??
????????????FREE(pIPAddrTable);??
????????????pIPAddrTable?=?(MIB_IPADDRTABLE?*)?MALLOC(dwSize);??
??
????????}??
????????if?(pIPAddrTable?==?NULL)?{??
????????????printf(“GetIpAddrTable()函數內存分配失敗\n“);??
????????????exit(1);??
????????}??
????}??
????//?第2次調用GetIpAddrTable()函數,獲取實際數據??
????if?(?(dwRetVal?=?GetIpAddrTable(?pIPAddrTable?&dwSize?0?))?!=?NO_ERROR?)?{???
????????printf(“GetIpAddrTable()調用失敗:?%d\n“?dwRetVal);??
????????if?(FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER?|?FORMAT_MESSAGE_FROM_SYSTEM?|?FORMAT_MESSAGE_IGNORE_INSERTS?NULL???
???????????????????dwRetVal?MAKELANGID(LANG_NEUTRAL?SUBLANG_DEFAULT)(LPTSTR)?&?lpMsgBuf?0?NULL))?{??
????????????printf(“\t錯誤信息:?%s“?lpMsgBuf);??
????????????LocalFree(lpMsgBuf);??
????????}??
????????exit(1);??
????}??
printf(“\t本機端口號:8888\n\n“);
????for?(int?i=0;?i?(int)?pIPAddrTable->dwNumEntries;?i++)?
{?
????????IPAddr.S_un.S_addr?=?(u_long)?pIPAddrTable->table[i].dwAddr;??
????????printf(“\tIP地址??[%d]:?????\t%s\n“?i?inet_ntoa(IPAddr)?);??
????????IPAddr.S_un.S_addr?=?(u_long)?pIPAddrTable->table[i].dwMask;??
????????printf(“\t子網掩碼[%d]:????\t%s\n“?i?inet_ntoa(IPAddr)?);??
????????IPAddr.S_un.S_addr?=(?(u_long)?pIPAddrTable->table[i].dwAddr?&?pIPAddrTable->table[i].dwMask)|(~pIPAddrTable->table[i].dwMask);??
????????printf(“\t廣播地址[%d]:??????\t%s?(%ld%)\n“?i?inet_ntoa(IPAddr)?pIPAddrTable->table[i].dwBCastAddr);??
printf(“\n“);??????
}
printf(“-----------------------------------------------------------\n\n“);
return?0;
}
int?main(int?argc?char*?argv[])
{
//初始化WSA
????WORD?socketVersion?=?MAKEWORD(22);??
????WSADATA?wsaData;
????if(WSAStartup(socketVersion?&wsaData)?!=?0)
????{
????????return?0;
????}
??
printf(“\n======================歡迎進入模擬聊天室====================\n\n“);
printf(“------首先請您輸入您要偵聽的端口號,以方便查看聊天記錄------\n\n“);
GetIpAddrTableFunction();
//創建一個隱藏進程
STARTUPINFO?si?=?{?sizeof(si)?};
????PROCESS_INFORMATION?pi;
si.dwFlags?=?STARTF_USESHOWWINDOW;
si.wShowWindow
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件?????311296??2017-03-29?23:19??151002525_滑蕊_課程設計\151002525_滑蕊_實驗報告.doc
?????文件??????36352??2017-05-13?14:40??151002525_滑蕊_課程設計\MyClient\Debug\MyClient.exe
?????文件?????396056??2017-05-13?14:40??151002525_滑蕊_課程設計\MyClient\Debug\MyClient.ilk
?????文件?????683008??2017-05-13?14:40??151002525_滑蕊_課程設計\MyClient\Debug\MyClient.pdb
?????文件??????31232??2016-06-24?02:43??151002525_滑蕊_課程設計\MyClient\Debug\_chat.exe
?????文件???47644672??2017-05-13?15:09??151002525_滑蕊_課程設計\MyClient\ipch\myclient-1d103d2e\myclient-7d3df811.ipch
?????文件???????9372??2017-05-13?14:40??151002525_滑蕊_課程設計\MyClient\MyClient\Client.cpp
?????文件???????3442??2017-05-13?14:40??151002525_滑蕊_課程設計\MyClient\MyClient\Debug\cl.command.1.tlog
?????文件?????138248??2017-05-13?14:40??151002525_滑蕊_課程設計\MyClient\MyClient\Debug\CL.read.1.tlog
?????文件???????2120??2017-05-13?14:40??151002525_滑蕊_課程設計\MyClient\MyClient\Debug\CL.write.1.tlog
?????文件??????78886??2017-05-13?14:40??151002525_滑蕊_課程設計\MyClient\MyClient\Debug\Client.obj
?????文件???????7206??2017-05-13?14:40??151002525_滑蕊_課程設計\MyClient\MyClient\Debug\li
?????文件??????17992??2017-05-13?14:40??151002525_滑蕊_課程設計\MyClient\MyClient\Debug\li
?????文件???????3700??2017-05-13?14:40??151002525_滑蕊_課程設計\MyClient\MyClient\Debug\li
?????文件???????2746??2017-05-13?14:40??151002525_滑蕊_課程設計\MyClient\MyClient\Debug\mt.command.1.tlog
?????文件???????4100??2017-05-13?14:40??151002525_滑蕊_課程設計\MyClient\MyClient\Debug\mt.read.1.tlog
?????文件???????2890??2017-03-29?21:57??151002525_滑蕊_課程設計\MyClient\MyClient\Debug\mt.read.2.tlog
?????文件???????1678??2017-05-13?14:40??151002525_滑蕊_課程設計\MyClient\MyClient\Debug\mt.write.1.tlog
?????文件????????381??2017-05-13?14:40??151002525_滑蕊_課程設計\MyClient\MyClient\Debug\MyClient.exe.intermediate.manifest
?????文件????????115??2017-05-13?15:42??151002525_滑蕊_課程設計\MyClient\MyClient\Debug\MyClient.lastbuildstate
?????文件????????995??2017-05-13?15:42??151002525_滑蕊_課程設計\MyClient\MyClient\Debug\MyClient.log
?????文件????????713??2017-03-29?14:09??151002525_滑蕊_課程設計\MyClient\MyClient\Debug\MyClient.vcxprojResolveAssemblyReference.cache
?????文件??????????0??2017-03-29?13:31??151002525_滑蕊_課程設計\MyClient\MyClient\Debug\MyClient.write.1.tlog
?????文件????1305600??2017-05-13?14:40??151002525_滑蕊_課程設計\MyClient\MyClient\Debug\vc100.idb
?????文件?????323584??2017-05-13?14:40??151002525_滑蕊_課程設計\MyClient\MyClient\Debug\vc100.pdb
?????文件???????3224??2017-03-29?13:31??151002525_滑蕊_課程設計\MyClient\MyClient\MyClient.vcxproj
?????文件????????944??2017-03-29?13:31??151002525_滑蕊_課程設計\MyClient\MyClient\MyClient.vcxproj.filters
?????文件????????143??2017-03-29?13:21??151002525_滑蕊_課程設計\MyClient\MyClient\MyClient.vcxproj.user
?????文件???31805440??2017-05-13?16:04??151002525_滑蕊_課程設計\MyClient\MyClient.sdf
?????文件????????891??2017-03-29?13:21??151002525_滑蕊_課程設計\MyClient\MyClient.sln
............此處省略134個文件信息
- 上一篇:c++車牌識別
- 下一篇:富士通單片機開發最全資料.zip
評論
共有 條評論