科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件VB.NET实现PC与掌上电脑PPC的双向通信

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

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

本文介绍如何利用VB.Net 通过Windows Sockets (Winsock)以及多线程编程进行桌面电脑与Pocket PC间的双向通信

作者:窦瑞欣 来源:天极开发 2007年11月9日

关键字:

  • 评论
  • 分享微博
  • 分享邮件
我们使用指定的本地主机IP地址和端口号将客户端连接到TCP主机,在堆栈中创建TcpClient对象的实例,当执行退出当前过程或函数时,堆栈中的资源会自动清除,保证内存空间被正确释放。连接成功后要发送和接收数据,使用 GetStream 方法来获取一个NetworkStream,NetworkStream为基础数据流,调用 NetworkStream 的 Write 和 Read 方法与远程主机之间发送和接收数据。当发送操作结束后使用 TcpClient的Close 方法断开连接、关闭对象并释放与 TcpClient 关联的所有资源。

  双击“连接”按钮,编写连接代码,代码片段如下:

‘创建TcpClient对象的实例

Client = New TcpClient

‘通过计算机名称和端口号连接到指定的计算机

Client.Connect(“192.200.0.100”,10200)
SendData =”由PPC传递过来的数据 – Author:Risen”

‘按一定的编码规则对要传递的数据进行编码 Buffer = Encoding.UTF8.GetBytes(SendData)

‘向已连接的服务程序发送数据

Client.GetStream().Write(Buffer, 0, Buffer.Length)

‘DataAvailable 指示NetworkStream 上是否有可用的数据。如果可以在流上读取数据,则为 true;

‘否则为 false,只要有数据存在就等待传输完毕

While Not Client.GetStream.DataAvailable()
 Application.DoEvents()
End While

‘接收由服务程序传递回客户端的数据并显示在对话框上

If Client.GetStream.DataAvailable() Then
 Client.GetStream().Read(InBuff, 0, InBuff.Length)
 rtndata = "服务程序已经成功收到指令,在" & System.Text.Encoding.Default.GetString(InBuff, 0, InBuff.Length)
 MsgBox(rtndata)
End If

‘断开连接、关闭对象并释放与 TcpClient 关联的所有资源

Client.Close()

  正确编译上述代码还需要在源文件的头部加入使用命名空间的引用,才能正确使用命名空间中的所有枚举、结构、类或模块等。

Imports System.Net.Sockets ‘<-添加需要导入的命名空间
Imports System.Text ‘<-添加需要导入的命名空间
Public Class Form1

……

  跟踪调试PPC程序需要在适当的模拟器下进行,譬如系统默认的PocketPC2002 模拟器,程序调试无误后可以连接到实际的PocketPC设备运行。实际部署到PPC设备需要在连接的桌面电脑上安装Microsoft ActiveSync将程序传输到用户目录中。

  2、创建桌面服务端程序

  启动Visual Studio .Net 2003,新建Visaul Basic项目,并选择“Windows应用程序”创建项目。项目创建完后Visaul Studio.Net会创建一个默认的主窗体Form1,在窗体上分别放置三个Label控件、两个TextBox控件、一个列表框控件和一个Button控件。

  创建全局的TcpListener对象的实例来侦听特定的端口,代码片段如下:

‘创建在本机IP地址和端口侦听的TcpListener对象的实例

Listener = New TcpListener(“192.200.0.100”, 10200)

'开始侦听

Listener.Start()

‘侦听状态标志

Listening = True
Label1.Text = "正在 192.200.0.100:10200 处侦听....."

……

  通过计时器定时检测侦听器有无连接请求并启用多线程来处理接收到的数据,代码片段如下: '声明创建线程时,使用 ThreadStart 委托作为其唯一参数的构造函数创建 Thread 类的新实例

Dim CurThreadStart As ThreadStart
Dim CurThread As Thread

'检测侦听器是否有挂起的连接请求,没有则退出计时器事件

If Not Listener.Pending() Then
 Exit Sub
End If

'有连接的请求则将计时器暂停,准备进行处理

tmProcessRequest.Enabled = False

'创建线程委托,传递需要操作的过程的地址

CurThreadStart = New ThreadStart(AddressOf ProcessRequest)
CurThread = New Thread(CurThreadStart)

'开始一个线程

CurThread.Start()

'重新启动计时器

tmProcessRequest.Enabled = True
    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章