• 大小: 39.49MB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2023-07-30
  • 语言: C/C++
  • 标签: 计算    

资源简介

根据给定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\link.command.1.tlog

     文件      17992  2017-05-13 14:40  151002525_滑蕊_课程设计\MyClient\MyClient\Debug\link.read.1.tlog

     文件       3700  2017-05-13 14:40  151002525_滑蕊_课程设计\MyClient\MyClient\Debug\link.write.1.tlog

     文件       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个文件信息

评论

共有 条评论