问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

利用c语言和数组

发布网友 发布时间:2022-05-19 18:11

我来回答

2个回答

懂视网 时间:2022-05-19 22:32

 

  一、 技术要点

  我们都知道Windows应用程序在运行时会启动一个进程,其总包括若干线程,不同的进程之间通信是开发分布式应用程序所必需的,传统上,这不仅需要深入了解通信流两端上进程的对象,而且还要深入了解低级别协议的宿主、应用程序编程接口以及配置工具等。总之,它是一项需要大量专业知识和经验的复杂任务。

  幸好.Net为我们提供了远程处理功能,它所提供的通信方法可以快速而方便地完成上述建立通信的任务。因此,无论是需要快速开发 Web 应用程序,还是要花费更多时间生成关键的企业范围的应用程序,.NET Framework 都会提供支持。通过 .NET 远程处理,客户端应用程序可以使用同一台计算机或其网络中其他任何可用的计算机上的其他进程中的对象。

  要使用 .NET 远程处理创建可以让两个对象跨越应用程序直接通信的应用程序,只需生成以下对象即可:

  1、 可远程处理的对象。

  2、 侦听对该远程对象的请求的应用程序即服务器程序。

  3、 对该远程对象发出请求的客户端应用程序。

  .Net下不同应用程序中的对象的通信方式有两种:一种是跨应用程序域边界传输对象副本,一种是使用代理交换消息。MarshalByRefObject 是通过使用代理交换消息来进行通信的对象的基类。当跨应用程序使用远程对象时,对象的基类必须是从 MarshalByRefObject 继承。

  二、 程序实现

  (1)我们先在VS的IDE中创建名为“TestRemoteAccess”的新的解决方案来容纳前述用来实现远程处理的三个项目,首先向解决方案中添加名为“RemoteObject”的类库,然后将默认创建的类名更改为“CRemoteAccess”,并且继承于“MarshalByRefObject”,代码如下:

using System;
using System.Collections.Generic;
using System.Text; 
namespace RemoteObject
{
 public class CRemoteAccess : MarshalByRefObject
 {}
}

 

  我们需要在该对象内创建用于连接和存取本地Access数据库的所有函数,供服务端客户端程序同时调用。用于连接和存取Access数据库的方法这里不再详述,参看附件源码。

  首先所有需要向客户端公开的函数其可见性都必须设为 public。变量m_ConnString需要设置为public static,目的是当客户端调用了SetRemoteAccessConnString后将数据库连接字符串保存下来以备在本次连接期间始终能够访问,代码如下:

……
public static string m_ConnString;
……
public void SetRemoteAccessConnString(string Connstr)
{
 m_ConnString = Connstr;
}
…… 

  成功连接了Access数据库后我们需要返回数据集给请求的客户端进行显示和编辑,在远程对象中我们声明了几个相关函数:

private void LoadData(string SqlStr, string TableName)
public void SaveData(DataTable ClientDataTable)
public DataTable GetUserTable(string SqlStr, string TableName) 

  客户端可以传递SQL查询脚本通过调用 GetUserTable来获取相关数据库表的数据,并返回一个DataTable,然后可以将该DataTable附值给DataGridView以便将数据显示出来。GetUserTable通过调用私有的LoadData 函数来完成对数据的获取。SaveData函数用于将编辑过的数据集保存回本地Access数据库文件,代码如下:

……
m_connection.Open();
m_adapter.Update(ClientDataTable);
……


(2)远程对象创建完成,我们需要创建用于侦听该远程对象请求的服务端应用程序。在“TestRemoteAccess”解决方案中新建一个Windows窗体项目名为:“TestServer”,从工具箱中拖拽下几个组件,界面如下所示:


服务器程序TestServer除了具备远程访问对象的能力外,它最主要的作用就是获取实际的Access数据库文件路径,并且设置远程对象的数据库连接字符串。我们必须添加远程对象以及远程处理和网络通讯协议等的类库的引用。在服务器程序启动初始,需要创建远程对象的实例以及注册通信端口,然后调用RemotingConfiguration.RegisterWellKnownServiceType 方法,MSDN中关于该方法的描述是这样的:通过使用给定的参数初始化 WellKnownServiceTypeEntry 的新实例,将服务端上的对象 Type 注册为已知类型,所有知道已注册已知对象的 URI 的客户都可以获取该对象的代理。所谓URI即统一资源标识符 (Uniform Resource Identifier)。代码如下:


……
remotableObject = new RemoteObject.CRemoteAccess();
TcpChannel channel = new TcpChannel(8080);
ChannelServices.RegisterChannel(channel);
RemotingConfiguration.RegisterWellKnownServiceType(typeof(RemoteObject.CRemoteAccess), "RithiaTestAccessServer", WellKnownObjectMode.Singleton);
……



  当选择了要进行存取的Access数据库文件后,我们需要调用远程对象的SetRemoteAccessConnString方法,该方法将保存在本次与服务器程序连接期间连接该Access数据库文件的连接字符串,代码如下:


……
ProviderStr = ProviderStrPart + txtAccessMdbFileName.Text + ";Jet OLEDB:Database Password=" + txtAccessPassword.Text;
……
remotableObject.SetRemoteAccessConnString(ProviderStr);
……



  (3)最后我们创建用于连接和请求服务的客户端程序,它会通过调用服务器程序TestServer已经注册的远程对象来获取相关数据集,并将编辑过的数据保存回实际的数据库文件。在“TestRemoteAccess”解决方案中新建一个Windows窗体项目名为:“TestClient”,从工具箱中拖拽下几个组件,界面如下所示:

客户端程序需要知道服务器程序所运行在的计算机名称或IP地址以及侦听的端口号,然后创建远程对象的实例,并且创建DataTable以便接收返回的数据,代码如下:

……
string RemoteURL;
Host = txtHost.Text;
Port = txtPort.Text;
RemoteURL = "tcp://" + Host + ":" + Port + "/RithiaTestAccessServer";
try
{
 TcpChannel chan = new TcpChannel();
 ChannelServices.RegisterChannel(chan);
 remoteObject = (RemoteObject.CRemoteAccess)Activator.GetObject(typeof(RemoteObject.CRemoteAccess), RemoteURL);
 RemoteDataTable = new DataTable();
 button3.Enabled = false;
}
catch (Exception E)
{
 MessageBox.Show(E.Message.ToString());
}
finally
{
}
…… 

  客户端程序根据服务程序所侦听的信道是TCP还是HTTP来注册相应的信道和端口号,并且组合成远程对象的Url,即Url= 信道://主机名:端口号/对象的Uri,然后创建远程对象的实例,就像使用本地对象一样可以对其进行存取,我们可以调用远程对象的GetUserTable方法获取指定查询脚本的结果集,代码如下:

……
RemoteDataTable = remoteObject.GetUserTable(txtSQL.Text, "Test");
dataGridView1.DataSource = RemoteDataTable;
…… 

  保存结果集时仅需简单调用SaveData方法即可,代码如下:

……
remoteObject.SaveData(RemoteDataTable);
…… 

  三、 结果

  该程序成功地在Visual Studio .Net 2005及Windows XP SP2下调试运行通过。
源码下载:http://d.download.csdn.net/down/401452/q520525745

热心网友 时间:2022-05-19 19:40

1、数组,顾名思义,是相同类型的数组成的一个组,也就是说是把相同类型的一系列数据统一编制到某一个组别中。这样就可以通过数组名+索引号简单快捷的操作大量数据。这就和全校学生一样,把学生分成多个班级,每个学生都是班级中的一员,如果要找张三,如果没有班级的话,就要在全校学生中一个一个寻找,一直到找到为止;但是如果引入了班级,就可以在某某班级中寻找张三,这样就更加方便快速了。

2、一般有四种数组定义方式,以一维数组为例:
//定义指定维数的数组
int arr[10];
//定义不指定维数的数组,数组维数有初化列表元素个数决定。
int arr[] = {1,2,4};
//定义指定维数的数组,初始化不完全时,系统将未初始化元素初始化为0
int arr[10] = {1,2};
//动态分配一个数组。下面分配了一个有10个元素的数组。
int *arr =(int *) malloc(10 * sizeof(int));追问我要的是代码。。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
逃跑吧!少年 逃跑吧少年有哪些彩蛋? 逃跑吧!少年 逃跑吧少年失忆者怎么玩? 逃跑吧!少年 逃跑吧少年失忆者动作举荧光棒在哪获得? 考驾照周六有考试吗 烟台星期六可以考驾照吗 考驾照的站岗星期六星期天可以站吗 如何看待张艺谋导演的电影《满江红》被指“辱女”? 满江红艺伎叫什么 月经不来尿尿前好像憋着似的一上厕所就尿的不多 怎么学英语歌?我学不会? 战地2怎么玩不了? 怎样才能成为<战地2>的高手? 战地2怎样安装才能玩,麻烦给个详细的说明 战地2,怎么才能在win7下玩起来 战地2应该在服务器上搜什么才能玩? 战地2需要什么配置才能玩到? 怎么玩战地2 自考本科证值不值得考 自学考试的到底值不值得一试 自考本科文凭值得报考吗? 自考本科值得考吗 这个配置玩GTA5,如何设置才流畅,不掉帧,在线等 这个配置玩gta5画面怎么设置画面才流畅,现在玩左右晃一下,画面是花的,感觉不流畅! gta5玩着卡怎么调流畅 代驾折叠车一般买多少公里 折叠自行车什么牌子的好 梦见自己找到过世的妈妈留下的枕头 求2009新春对联 急!!!求写对联 星系保卫战佳音喜欢谁 沙特和中国的关系 中国和沙特关系好吗 足球中国与沙特是北京时间什么时候举行? 如果2002年的中国足球队和沙特队打一局,谁可能会赢? 沙特对中国背信弃义,到底是蓄意已久还是自取其 沙特阿拉伯和中国军事哪一个强 利用C语言编写程序 帮老公贷款现在还不上怎么办 夫妻一方银行贷款还不上能影响另一方吗? 银行夫妻共同所有房贷还不上会怎么处理 哺乳期自己喝母乳会不会提高免疫力? 日本人的复数形式英语 日本人的英语怎么写? 【初二】问一下关于American,Japanese和等等的英语复数形式 日本人的复数用英语说要不要加s说明是加喷腻子 利用C语言读取含文件头的txt文本并将学生信息和成绩分别保存到数组? 电力金具ub-0770适用多大的孔径 ubstore怎么处理照片 刀锋2500移动硬盘多大 如何分辨苏-27及其发展型号(如苏30,33,34,35等)