客户端程序可把客户端机器信息发包到服务器端服务器端怎样把包写入文本文件呢?

解决方案 »

  1.   

    CString strRecv="接收到的数据...";
    FILE* pf=fopen("c:\recv.txt","w+");
    fprintf(pf,"%s",strRecv);
    fclose(pf);
      

  2.   

    mfc提供了类啊,你自己看看就知道了。结合arche.
      

  3.   

    你要的是数据包的二进制文件吗看看下面代码是不是你要的(先安装winpcap)#include "WinSock2.h"
    #include "stdio.h"
    #include "windows.h"
    #include "pcap.h"#define IO_RCVALL _WSAIOW(IOC_VENDOR,1)
      void main()
    {
    int i = 0;
    SOCKET SnifferSocket;
    WSADATA wsaData;
    WSAStartup(MAKEWORD(2,2),&wsaData);           //开启winsock.dll
    SnifferSocket=WSASocket(AF_INET, SOCK_RAW,IPPROTO_IP,NULL,0,WSA_FLAG_OVERLAPPED);//创建raw  socket
    char FAR name[128];                                //获取本机IP地址
    gethostname(name, sizeof(name));
    struct hostent FAR * pHostent;
    pHostent = gethostbyname(name);

    SOCKADDR_IN sa;                           //填充SOCKADDR_IN结构的内容
    sa.sin_family = AF_INET;
    sa.sin_port = htons(10003);           // 端口号可以随便改,当然与当然系统不能冲突
    memcpy(&(sa.sin_addr),pHostent->h_addr,pHostent->h_length);
    bind(SnifferSocket,(LPSOCKADDR)&sa,sizeof(sa));            //绑定
    //方法二,winpcap捕获数据包
    pcap_if_t* alldevs;
    pcap_if_t* d;
    char errbuf[PCAP_ERRBUF_SIZE];
    memset(errbuf, 0, PCAP_ERRBUF_SIZE);
    pcap_findalldevs(&alldevs,errbuf);       // 获得网络设备指针
    for(d=alldevs;d;d=d->next)               // 枚举网卡然后添加到ComboBox中
    {
    d->name;                            // d->name就是我们需要的网卡名字字符串,按照你// 自己的需要保存到你的相应变量中去 
    }
    pcap_t* adhandle;
    memset(errbuf, 0, PCAP_ERRBUF_SIZE);
    // 打开网卡,并且设置为混杂模式
    // pCardName是前面传来的网卡名字参数
    adhandle = pcap_open_live(alldevs->name, 65535, 1, 1000, errbuf);
    pcap_freealldevs(alldevs); 
    /*
    功能: 建立或者打开存储数据包内容的文件,并返回其句柄
    参数: pcap_t *  p:前面打开的网卡句柄;const char * fname :要保存的文件名字    
    返回值:pcap_dumper_t* : 保存文件的描述句柄,具体细节我们不用关心
    */
    pcap_dumper_t* dFile = pcap_dump_open  (adhandle, "c:\\Packet.dat"); /*
    功能:从网卡或者数据包文件中读取数据内容
    参数:pcap_t * p: 网卡句柄  struct pcap_pkthdr ** pkt_header: 并非是数据包的指针,只是与数据包捕获驱动有关的一个Header
          u_char ** pkt_data:指向数据包内容的指针 ,包括了协议头   
    返回值:1:如果成功读取数据包 0:pcap_open_live()设定的超时时间之内没有读取到内容
    -1: 出现错误  -2: 读文件时读到了末尾
    */  u_char *pkt_data;
    struct pcap_pkthdr * pkt_header;
    while((i = pcap_next_ex(adhandle, &pkt_header, (const u_char**)&pkt_data)) >= 0){
    //将捕获的数据包存入文件
    pcap_dump((unsigned char*)dFile, pkt_header,pkt_data);
    }
    }
      

  4.   

    MFC的类CFile,或者i/0操作api都可以将你接收到数据包写倒本地!