知识大全 VB.NET实现PC与掌上电脑PPC的双向通信

Posted

篇首语:别裁伪体亲风雅,转益多师是汝师。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 VB.NET实现PC与掌上电脑PPC的双向通信相关的知识,希望对你有一定的参考价值。

VB.NET实现PC与掌上电脑PPC的双向通信  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

本文介绍如何利用 通过Windows Sockets (Winsock)以及多线程编程进行桌面电脑与Pocket PC(掌上电脑 简称 PPC)间的双向通信 并且通过当今流行平台编程语言Visaul Basic Net 编写PC端和PPC端程序实现两者的信息交换   一 概述  如今移动计算设备越来越普及 而PPC与桌面电脑的数据交换更是其必不可少的功能 笔者根据实际的无线PPC开发认为 PPC程序与桌面程序进行通信 除了可以通过SQL Server CE提供的RDA(远程数据存取)和Replication(复制)来完成与桌面SQL Server的数据存取外 另外一种比较方便快捷的方法则是通过Socket与桌面电脑完成信息的交换    采用Visaul Basic Net 进行PPC和桌面电脑的程序编写 已经完全不同于过去的VB 它的诸多新特性以及依托 Net平台强大的面向对象体系使VB Net焕然一新 不仅编写桌面程序更加轻松快捷而且更可快速的 可视化的开发以Pocket PC为平台的智能设备程序    Net框架是一种新的计算平台 可以简单理解为组件库或者类库 类似于MFC和VCL 但是却比它们更加强大和易用 NET框架具有两个主要组件 公共语言运行库和 NET 框架类库 公共语言运行库是 NET 框架的基础 可以将运行库看作一个在执行时管理代码的代理 它提供核心服务(如内存管理 线程管理和远程处理等) 以运行库为目标的代码称为托管代码 而不以运行库为目标的代码称为非托管代码 NET 框架类库是一个与公共语言运行库紧密集成的可重用的类型集合 该类库是面向对象的 NET 框架类库能够完成一系列常见编程任务 包括诸如字符串管理 数据收集 数据库连接以及文件访问等任务    Net框架精简版是完整 Net框架的子集 它是对完整的 Net框架进行精简后得到的版本 虽然其规模大大减小 但多数功能仍然保持完整 使用 NET框架精简版可以针对Pocket PC和其他Windows CE NET设备进行开发和部署 提高开发人员的工作效率 VB Net编译的桌面程序在目标机器上需要 Net框架的支持才能运行 而编译过的PPC程序需要在目标PPC上装载 Net框架精简版后方可运行   二 设计思路  在 Net框架中System Net Sockets命名空间为需要严密控制网络访问的开发提供了 Windows Sockets (Winsock) 接口的托管实现 该命名空间中包含了与Socket相关的类 接口和枚举 主要包括实现 Berkeley 套接字接口的Socket类 用于 TCP 网络客户端侦听连接的TcpListener类 为 TCP 网络服务提供客户端连接的TcpClient类以及提供无连接的发送和接收用户数据文报 (UDP) 的网络服务等 该命名空间下的大部分类都受 Net框架精简版的支持 也就是说实现这些对象的代码完全可以在装载有 Net框架精简版的PPC上运行   可以把PPC当作局域网中的一个终端来与桌面电脑连接 它们之间有多种物理连接方式 通常可以使用USB线缆配合ActiveSync直接与桌面电脑连接 当然 若PPC和桌面电脑同时具备其它的连接方式 比如无线WiFi(无线 x) 蓝牙等都可以组成相应的无线局域网络   在PPC上编写客户端程序并实现TcpClient类 用于连接 发送和接收流数据 在桌面电脑上我们设计Socket服务端程序并实现TcpListener类和Socket类 用于侦听和接受传入连接的请求 Socket类为网络通信提供了一套非常丰富的方法和属性 服务程序可以使用 TcpListener Listen 方法侦听连接 Accept 方法处理任何传入的连接请求 并返回可用于与远程主机进行数据通信的Socket 如果当前使用的是无连接协议(如UDP) 则根本不需要侦听连接 实际上TcpClient类和TcpListener类为 Socket通信提供了比Socket类更简单 对用户更友好的接口 如果编写较简单的应用程序 而且只需同步数据传输 则可以考虑使用 TcpClient TcpListener 和 UdpClient ……Listener = New TcpListener(System Net IPAddress Parse( ) ) Listener Start()Label Text = 正在 : 处侦听 ……   三 程序的具体实现   创建PPC客户端程序  启动Visual Studio Net 新建Visaul Basic项目 并选择 智能设备应用程序 选择 Pocket PC 平台的 Windows 应用程序 并创建项目 Pocket PC平台是Windows CE 平台的子集 Windows CE系统的应用则更加广泛 项目创建完后 Visaul Studio Net会创建一个默认的主窗体Form 在窗体上分别放置两个Panel控件 四个Label控件 三个TextBox控件和两个Button控件   PPC客户端程序界面   设计PPC程序的Form窗体与桌面程序没有太多差别 只是少了一些PPC上所不支持的属性 但是属性的名称并没有变化 在PPC上没有窗口最小化的实际意义 所以主窗体的MinimizeBox属性必须设置成False 否则 当需要退出程序点击标题栏最右侧的关闭按钮时 程序并没有真正退出而是隐藏在后台 程序需要重新激活才能回到前台 或者可以向一个Button添加关闭主窗体的代码 Private Sub Button _Click(ByVal sender As System Object ByVal e As System EventArgs) Handles Button Click Me Close()End Sub  Me 为VB Net中的关键字 可以引用当前在其中执行代码的类或结构的特定实例 Me 的行为与引用当前实例的对象变量或结构变量类似 此例Me代表主窗体的实例Form 使用TcpClient向TcpListener或Socket 侦听器连接并交换数据 可以使用下面两种方法之一连接到侦听器   ( )创建一个 TcpClient 并调用三个可用的 Connect 方法之一   ( )使用远程主机的主机名和端口号创建 TcpClient 此构造函数将自动尝试一个连接   TcpClient的Connect 方法使用指定的主机名和端口号将客户端连接到 TCP 主机 重载函数原型为   使用指定的远程网络终结点将客户端连接到远程 TCP 主机 Overloads Public Sub Connect(IPEndPoint)  使用指定的 IP 地址和端口号将客户端连接到 TCP 主机 Overloads Public Sub Connect(IPAddress Integer)  将客户端连接到指定主机上的指定端口 Overloads Public Sub Connect(String Integer)  我们使用指定的本地主机IP地址和端口号将客户端连接到TCP主机 在堆栈中创建TcpClient对象的实例 当执行退出当前过程或函数时 堆栈中的资源会自动清除 保证内存空间被正确释放 连接成功后要发送和接收数据 使用 GetStream 方法来获取一个NeorkStream NeorkStream为基础数据流 调用 NeorkStream 的 Write 和 Read 方法与远程主机之间发送和接收数据 当发送操作结束后使用 TcpClient的Close 方法断开连接 关闭对象并释放与 TcpClient 关联的所有资源   双击 连接 按钮 编写连接代码 代码片段如下

   创建TcpClient对象的实例Client = New TcpClient 通过计算机名称和端口号连接到指定的计算机Client Connect( )SendData = 由PPC传递过来的数据 – Author Risen 按一定的编码规则对要传递的数据进行编码 Buffer = Encoding UTF GetBytes(SendData) 向已连接的服务程序发送数据Client GetStream() Write(Buffer Buffer Length) DataAvailable 指示NeorkStream 上是否有可用的数据 如果可以在流上读取数据 则为 true 否则为 false 只要有数据存在就等待传输完毕While Not Client GetStream DataAvailable() Application DoEvents()End While 接收由服务程序传递回客户端的数据并显示在对话框上If Client GetStream DataAvailable() Then Client GetStream() Read(InBuff InBuff Length) rtndata = 服务程序已经成功收到指令 在 & System Text Encoding Default GetString(InBuff InBuff Length) MsgBox(rtndata)End If 断开连接 关闭对象并释放与 TcpClient 关联的所有资源

Client Close()   正确编译上述代码还需要在源文件的头部加入使用命名空间的引用 才能正确使用命名空间中的所有枚举 结构 类或模块等 Imports Sockets < 添加需要导入的命名空间Imports System Text < 添加需要导入的命名空间Public Class Form ……  跟踪调试PPC程序需要在适当的模拟器下进行 譬如系统默认的PocketPC 模拟器 程序调试无误后可以连接到实际的PocketPC设备运行 实际部署到PPC设备需要在连接的桌面电脑上安装Microsoft ActiveSync将程序传输到用户目录中    创建桌面服务端程序  启动Visual Studio Net 新建Visaul Basic项目 并选择 Windows应用程序 创建项目 项目创建完后Visaul Studio Net会创建一个默认的主窗体Form 在窗体上分别放置三个Label控件 两个TextBox控件 一个列表框控件和一个Button控件   创建全局的TcpListener对象的实例来侦听特定的端口 代码片段如下 创建在本机IP地址和端口侦听的TcpListener对象的实例Listener = New TcpListener( ) 开始侦听Listener Start() 侦听状态标志Listening = TrueLabel Text = 正在 处侦听 ……  通过计时器定时检测侦听器有无连接请求并启用多线程来处理接收到的数据 代码片段如下 声明创建线程时 使用 ThreadStart 委托作为其唯一参数的构造函数创建 Thread 类的新实例 Dim CurThreadStart As ThreadStartDim CurThread As Thread 检测侦听器是否有挂起的连接请求 没有则退出计时器事件If Not Listener Pending() Then Exit SubEnd If 有连接的请求则将计时器暂停 准备进行处理tmProcessRequest Enabled = False 创建线程委托 传递需要操作的过程的地址CurThreadStart = New ThreadStart(AddressOf ProcessRequest)CurThread = New Thread(CurThreadStart) 开始一个线程CurThread Start() 重新启动计时器tmProcessRequest Enabled = True

  将计时器触发事件的频率Interval(以毫秒为单位)适当调节可以改变服务程序响应连接请求的快慢   计时器不断循环 一旦发现有连接的请求就会创建一个线程专门来处理这个连接 创建线程时需要传递处理连接的过程或函数的地址以被线程调用

  服务程序通过已连接的Socket获取数据 接收到的数据按相应的编码规则进行解码并将信息添加到列表框中 ……CurThread = System Threading Thread CurrentThread() 接受挂起的连接请求并返回可用来发送和接收数据的SocketCurSocket = Listener AcceptSocketWhile Listening If CurSocket Available > Then   接收来自绑定的Socket的数据  Bytes = CurSocket Receive(Buffer Buffer Length )   将接收到的数据转化成相应编码的字符串  ReceivedData= Encoding UTF GetString(Buffer)  SyncLock CurThread  lbReceived Items Add(ReceivedData)End SyncLock……  TCPListener AcceptSocket接受挂起的连接请求 并且返回用于发送和接收数据的 Socket 此 Socket 继续用于和新连接上的客户端通信   SyncLock 语句确保多个线程不会同时执行向列表框添加数据的操作 当线程到达 SyncLock 块时 将计算表达式并保持此互斥性 直到在表达式返回的对象上有锁为止 这防止了表达式在多个线程运行期间更改值 从而避免代码产生意外的结果   向客户端返回服务端处理后的消息 代码片段如下 格式化返回消息 这是服务器端处理后的结果并返回到客户端 BacktoClientData = System DateTime Now 向客户端传递服务端程序处理时的时间Buffer = Encoding UTF GetBytes(BacktoClientData ToCharArray) 通过打开的套接字将结果发送回客户端应用程序 然后关闭该套接字 CurSocket Send(Buffer Buffer Length )CurSocket Close()  编译桌面服务端程序运行效果如下图所示   当服务程序处理完一个连接后就向相应的PPC客户端返回一条成功信息 如下图所示   至此 PPC客户端程序和桌面服务端程序编写完毕 该系统在安装WindowsXP SP 的桌面电脑和Dell X i 的PPC上测试通过   四 结论  本程序简单介绍了PC与PPC之间Socket通信方法 在实际应用中还有很多细节要做 并且还有可以拓展的地方 该模型为实现PC与PPC间复杂的信息交互 创建复杂的无线信息系统提供了一定技术基础 cha138/Article/program/net/201311/11532

相关参考

什么是现场总线?它与PLC有什么关系?

  现场总线是连接智能现场设备和自动化系统的数字式、双向传输、多分支结构的通信网络,它是当前工业自动化的热点之一。现场总线以开放的、独立的、全数字化的双向多变鼋通信代替0?10mA或4?20mA现场电

什么是现场总线?它与PLC有什么关系?

  现场总线是连接智能现场设备和自动化系统的数字式、双向传输、多分支结构的通信网络,它是当前工业自动化的热点之一。现场总线以开放的、独立的、全数字化的双向多变鼋通信代替0?10mA或4?20mA现场电

知识大全 通信工程的学生对电脑需求大吗,基本用在哪,大一有必要买吗

通信工程的学生对电脑需求大吗,基本用在哪,大一有必要买吗1、需求一般,自学一些技术会用到,大一一般没必要,国内的大学大一一般只学习基本课程,大二才开始学习专业技术课。2、本专业培养具备通信技术、通信系

知识大全 我是学通信工程的大一新生,下学期想拿电脑。不知道买那个牌子买哪个型号

我是学通信工程的大一新生,下学期想拿电脑。不知道买那个牌子买哪个型号通讯工程专业,基本上都是理论课,没记得有啥实践课,甚至最后毕业设计也只是书面设计一个通讯程序。所以专业方面基本用不到电脑,买一台惠普

什么是蓝牙技术?

  所谓蓝牙技术,实际上是一种短距离(一般是10m之内)无线通信技术,其传输速率为1Mbit/s。利用蓝牙技术,能够有效地简化掌上电脑、笔记本电脑和移动手机等移动通信终端设备之间的通信,也能够成功地简

什么是蓝牙技术?

  所谓蓝牙技术,实际上是一种短距离(一般是10m之内)无线通信技术,其传输速率为1Mbit/s。利用蓝牙技术,能够有效地简化掌上电脑、笔记本电脑和移动手机等移动通信终端设备之间的通信,也能够成功地简

知识大全 循环链表与双向链表

第九课本课主题循环链表与双向链表教学目的掌握循环链表的概念掌握双向链表的的表示与实现教学重点双向链表的表示与实现教学难点双向链表的存储表示授课内容一复习线性链表的存储结构二循环链表的存储结构循环链表是

智能配电室的定义?

  智能配电室定义为:建立在集成的、高速双向通信网络的基础上,采用先进、可靠、集成、低碳、环保的智能设备,以全站信息数字化、通信平台网络化、信息共享标准化为基本要求,自动完成信息采集、测量、控制、保护

智能配电室的定义?

  智能配电室定义为:建立在集成的、高速双向通信网络的基础上,采用先进、可靠、集成、低碳、环保的智能设备,以全站信息数字化、通信平台网络化、信息共享标准化为基本要求,自动完成信息采集、测量、控制、保护

知识大全 list与iterator区别多双向关联配置

  对于Query接口的list()方法与iterator()方法来说都可以实现获取查询的对象但是list()方法返回的每个对象都是完整的(对象中的每个属性都被表中的字段填充上了)而iterator(