资源简介
根据给定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
相关资源
- 基于MFC编写的FTP客户端(使用VS)
- 光线跟踪 入门级 项目代码
- P2P网络技术原理与C++开发案例pdf版
- 浙江省历年计算机二级c语言真题及答
- MFC局域网聊天室可屏蔽、可私聊C++ 客
- 计算机名校复试上机题
- 计算机图形学实践教程随书源代码
-
2020年3月25日官方网站的 PotPla
yer 播 - 杭电计算机学院复习资料
- 计算机图形学实践教程 vc++ 案例 源码
- 孔令德 计算机图形学基础教程visual
- 基于GBN的可靠数据传输
- VISUAL C++MFC编程85个PDF电子书
- NSGA II代码实现集合包含、讲解及 网络
- 未来教育二级C语言VIP版
- 牛客网C++ .pdf
- 深入理解计算机系统CMU官方最新PPT
- 水准网平差C++语言实现
- 计算机图形学实践教程第2版源程序
- 计算机基础知识思维导图.zip
-
C++与ja
vasc ript交互 - 3D三角形网格模型补洞源代码
- C++高级网络编程经典的C++网络编程书
- The Art of Scientific Computing第二版、第三
- 导线网平差程序
- MFC实现Koch曲线的绘制
- 网络编程简单聊天室
- 计算机考研资料
- 网络编程C++ MFC获取MAC地址
- 基于边缘梯度的模板匹配算法
评论
共有 条评论