中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档 | 网通镜像
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > 编程语言 > VFP
用VFP实现点对点通信
作者:未知 时间:2005-08-07 21:03 出处:编程爱好者网站 责编:chinaitpower
              摘要:用VFP实现点对点通信
提起“网络聊天”,大家一定不会感到陌生,其实现一般都是依靠Winsock控件来实现的,而且介绍用此控件进行通讯的程序资料也很多,但纵观这些资料,基本上都是介绍在VB、VC、Delphi等编程语言实现的,而用Winsock控件在VFP中进行编程的资料却非常少(几乎找不到),尤其是利用此控件在VFP中进行非文本文件的传输,更是一大难题:VFP中没有二进制类型的变量定义。笔者经过长时间的摸索,掌握了一些有关这方面的编程经验,现加以总结,以便和广大的VFP爱好者共同探讨:  

一、编程基础  
因为有关Winsock控件的资料在很多媒体上都有相关介绍,因此为了节省篇幅,我就不再作具体介绍,请大家查找一下有关资料即可,这里我只简单说一下要用到的一些设置。为了保证通讯的可靠性,在下面的程序中使用的是TCP/IP协议,并且在客户端和服务端均采用预设端口1001(大家在实践时可以自行更改)。  

二、界面设计  
1.客户端  



客户端

在上面的界面中共有7个对象,属性Name=TcpClient,RemoteHostport=1001,其余属性可根据需要自行设置,其余对象的设置也可自行设置。  

2.服务端  



服务器端

在上面的界面中共有5个对象,属性Name=TcpServer,LocalHostport=1001,此属性务必和客户端的远程主机端口一致,其余属性可根据需要自行设置,其余对象的设置也可自行设置。  

三、实现代码  
1.客户端  

■表单的 Init 事件:  

public strData
strData = ""
thisform.tcpClient.RemoteHost = "192.41.242.18"
thisform.tcpClient.RemotePort = 1001  

■“连接”按钮.Click 事件  

thisform.tcpClient.object.Connect("192.41.242.18",1001)
this.Enabled = .f.  

■TcpClient.DataArrive 事件  

*** ActiveX Control Event ***
LPARAMETERS bytestotal
thisform.tcpClient.Object.GetData(@strData)
thisform.txtOutput1.Value = strData  

■TxtSend1.InteractiveChange 事件  

thisform.tcpClient.Object.SendData(this.Value)  

2.服务端  

■表单的 Init 事件:  

public strData
strData = ""
thisform.tcpServer.Object.LocalPort = 1001
thisform.tcpServer.Object.Listen  

■TcpServer.ConnectionRequest 事件  

*** ActiveX Control Event ***
LPARAMETERS requestID
If thisform.tcpServer.OBJECT.State <> 0
thisform.tcpServer.OBJECT.Close
endif
thisform.tcpServer.OBJECT.Accept(requestID) 常数 值 说明  
sckClosed 0 关闭(默认)  
sckOpen 1 打开  
sckListening 2 侦听  
sckConnected 7 已连接  
sckError 9 发生了错误  
  

■TcpServer.DataArrive 事件  

*** ActiveX Control Event ***
LPARAMETERS bytestotal
thisform.tcpClient.Object.GetData(@strData)
thisform.txtOutput1.Value = strData  

■TxtSendData.InteractiveChange 事件  

thisform.tcpServer.Object.SendData(this.Value)  

现在我们就可以运行了,看看怎么样,既可以在同一台机器上运行,也可以在局域网上运行。  

注意  

一定要在Winsock对象代码中加入VFP的关键字OBJECT,否则是不可能成功的(我也是在无数次失败后才得到的答案)。  

四、扩展及其它  
以上我们简单实现了使用Winsock控件的点对点通信程序,界面比较简单,功能也相对较少,读者可据此进行扩充。下面我再说说有关文件传输的问题。  

在上面的程序中,已经能够进行实时点对点通信,但要用此进行文件传输,还有一大难题需要解决。因为VFP并不提供二进制类型的变量定义,因此要向进行文件的传输,必须解决ASCII码大于128的字符传送问题。不过在VFP6.0版本中,提供了filetostr()和strtofile()文件与内存变量的转换函数,不过在具体的运行中,我发现利用这两个函数只能传送不大于8K字节的文件,并且要求是文本类型才可以。因此,我们不能采用此中解决办法,还好,VFP6.0提供了二个非常有用的字节处理函数bintoc()和ctobin(),其中bintoc()函数是将长整型数据转换为相应的4个字节字符(默认值,可改动),ctobin()函数则相反,有关的详细资料请参阅VFP帮助。这样我们就可以利用这两个函数来进行文件的传输了。有了上面的基础,想必该怎么编写代码你也该会了(只需在Winsock对象的DataArrive事件中加入一些代码即可),我就不详述了。

关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有