使用VC建立网络连接并访问网络资源

目录

  • 1. 提出问题
  • 2. 解决方案

1. 提出问题

在windows下可以通过系统操作,将局域网的资源映射到本地,从而实现像本地数据一样访问网络资源。实际上这些步骤也可通过代码调用win32函数实现,前提是你得知道目标机器的地址以及密钥。

2. 解决方案

直接上VC的实例代码:

#include <Windows.h>
#include <iostream>
#include <fstream>

#pragma comment(lib, "mpr.lib")
#pragma comment(lib, "Netapi32.lib")

using namespace std;

int main()
{
    //在目标机器磁盘建立一个1.txt,无法直接读取
    ifstream infile("\\\\Jishi\\D\\1.txt");
    if (infile)
    {
        cout << "read txt!" << endl;
    }
    else
    {
        cout << "can't read txt!" << endl;
    }
    infile.close();

    //建立网络磁盘映射的连接
    string localName = "Y:";
    string remoteName = "\\\\Jishi\\D";
    string password = "123456";
    string user = "administrator";

    NETRESOURCE nr = { 0 };
    nr.dwType = RESOURCETYPE_ANY;
    nr.lpLocalName = const_cast<char *>(localName.c_str());
    nr.lpRemoteName = const_cast<char *>(remoteName.c_str());
    nr.lpProvider = NULL;

    DWORD dRes = WNetAddConnection2(&nr, password.c_str(), user.c_str(), CONNECT_UPDATE_PROFILE);

    //通过GetLastError()检查错误代码
    cout <<"连接结果:"<< dRes << endl;

    //读取映射盘符的连接
    ifstream infile1("Y:\\1.txt");
    if (infile1)
    {
        cout << "read txt!" << endl;
    }
    else
    {
        cout << "can't read txt!" << endl;
    }
    infile1.close();

    //读取网络地址的连接
    ifstream infile2("\\\\Jishi\\D\\1.txt");
    if (infile2)
    {
        cout << "read txt!" << endl;
    }
    else
    {
        cout << "can't read txt!" << endl;
    }
    infile2.close();

    //最后断开Y盘的连接
    WNetCancelConnection("Y:", TRUE);

    return 0;
}

该功能主要是通过调用WNetAddConnection2()函数来实现连接,通过WNetCancelConnection()函数断开的。其实连接后可以保证一定运行周期都是有效的,不用每次都断开重新再连。实际运用过程中两个函数的返回值会提供错误信息,可以通过GetLastError()获取并检查。
这里访问了三次网络资源,连接前访问,连接后映射地址访问,网络地址访问。这里的网络地址改成IP地址也是可以的。运行结果:

原文地址:https://www.cnblogs.com/charlee44/p/10455348.html

时间: 2024-10-10 17:32:45

使用VC建立网络连接并访问网络资源的相关文章

Java网络编程从入门到精通(14):多种多样的建立网络连接的方式

在上一篇文章中我们讨论了Socket类的基本用法,并给出的例子中使用Socket类连接服务器时使用了一种最简单的连接方式,也就是通过IP和端口号来连接服务器.而为了使连接服务器的方式更灵活,Socket类不仅可以通过自身的构造方法连接服务器,而且也可以通过connect方法来连接数据库. 一.通过构造方法连接服务器 我们可以通过6个重载构造函数以不同的方式来连接服务器.这6个重载的构造函数可以分为两类: 1. 自动选择IP     这种方式是最常用的.所谓自动选择IP,是指当本机有多块网卡或者在

VMware10中的Linux系统利用NAT网络连接方式访问外网配置

一.描述 在VMware10中 提供常见的三种网络连接方式 : 1.Bridge:这种方式最简单,直接将虚拟网卡桥接到一个物理网卡上面,与linux下一个网卡绑定两个不同地址类似,实际上是将网卡设置为混杂模式,从而达到侦听多个IP的能力. 在此种模式下,虚拟机内部的网卡(例如linux下的eth0)直接连到了我们真实物理网卡所在的网络上,相当于虚拟机和真实主机处于对等的地位,在网络关系上是平等的,没有谁在谁后面的问题.使用这种方式很简单,前提是你有1个以上的IP地址,这个不太适合使用. 2.na

Socket建立网络连接方法

建立Socket连接至少需要一对套接字,其中一个运行于客户端,称为ClientSocket ,另一个运行于服务器端,称为ServerSocket . 套接字之间的连接过程分为三个步骤:服务器监听,客户端请求,连接确认. 1.服务器监听:服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态,等待客户端的连接请求. 2.客户端请求:指客户端的套接字提出连接请求,要连接的目标是服务器端的套接字. 为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字

linux网络连接

ssh:安全登录远程主机或运行远程命令(ssh:Secure Shell) telnet:登录远程主机(不安全) scp:在远程主机和本地间安全传输文件 sftp:在远程主机和本地间安全传输文件(交互式) ftp:在远程主机和本地间传输文件(交互式,不安全) 在linux系统中,很容易在机器之间建立网络连接,进行远程登录及文件传输.不过需要你确认这样做的安全性. linux网络连接

利用minidwep跑PIN+跑包破解密码连接无线网络无internet访问

1.对方wlan没有连接,这种如果是他的网线没插,没有办法.如果不是,并且进入路由器查看宽带是否连接. 2.连接无线网络,但是显示无INTERNET访问,可以ipconfig查看ip.mask.gateway是否正确 由于本人网络到期,学习破解wifi,连入他人wifi,显示无INTERNET访问,由于部分无法获取ip地址,所以写批处理文件快速配置ip地址.子网掩码.网关. @echo off netsh interface ip set address name="无线网络连接" s

VC获得本机网络连接状态

/本机网络连接类型(成功) #define  NET_TYPE_RAS_DIAL_UP_CONNECT_NET           0x01    //上网类型:采用RAS拨号连接上网    0x01 #define  NET_TYPE_LAN_CONNECT_NET                   0x02    //上网类型:采用网卡通过局域网上网 0x02 #define  NET_TYPE_PROXY_CONNECT_NET                 0x04    //上网类

禁用网络连接后无法访问本机数据库的问题

今天外出演示的同事反馈了个问题,说是没插网线,访问不了本机的数据库. 借这个问题,理清了下 (1)127.0.0.1, (2). (3)本机IP (4)localhost 之间的区别. no1:localhost也叫local ,正确的解释是:本地服务器127.0.0.1在windows等系统的正确解释是:本机地址(本机服务器)他们的解析通过本机的host文件,windows自动将localhost解析为127.0.0.1no2:localhot(local)是不经网卡传输!这点很重要,它不受网

使用浏览器的开发者工具与 DIG 命令行工具,来分析访问站点时的网络连接与 HTTP 请求和响应

前言 想必有些朋友和我一样,想要弄清楚当使用浏览器访问一个站点时,究竟向那些站点发起了 HTTP 请求:站点的 HTTP 响应:这些站点的域名是否和 shell 终端输出的 socket 套接字IP地址对应得上:这些站点使用的域名,IP地址,物理地址,域名拥有者和IP地址拥有者之间的联系:系统当前是否存在恶意或非法的网络连接...等等. 本博文就是要以随手取得的开源工具,并且用一种可实际操作的标准化流程,来达到上述种种分析任务的目标. 这套工具集与流程,以及思路,适用于你想分析的任何对象(这里指

VC网络连接判断API

bool isConnect; DWORD dw; isConnect = ::IsNetworkAlive(&dw); if(isConnect) cout << "IsNetworkAlive连接" <<endl; else cout << "IsNetworkAlive未连接" <<endl; cout<< "---------------------------------&quo