设计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 SubMe 为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 CurThreadlbReceived 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间复杂的信息交互 创建复杂的无线信息系统提供了一定技术基础 lishixinzhi/Article/program/net/201311/11532
奔腾,AMD都是x86 龙芯是mips
微软和intel的wintel联盟有强大的利益支持,所以暂时不会支持非x86平台 2非x86平台一般是嵌入式设备或服务器,windows主要用于桌面,微软在其他领域没有太大优势 3维护一个平台的开发需要大量人力物力,windows这样的非开源产品所有的核心部件都需要微软自己来维护,仅x86部分成本就非常高了,redhat也只支持x86,ppc等少数cpu架构
>
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)