用VFP实现依靠Winsock点对点通信

提起“网络聊天”,大家一定不会感到陌生,其实现一般都是依靠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 strDatastrData = ""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 bytestotalthisform.tcpClient.Object.GetData(@strData)thisform.txtOutput1.Value = strData ■TxtSend1.InteractiveChange 事件 thisform.tcpClient.Object.SendData(this.Value)

2.服务端 

■表单的 Init 事件: 

public strDatastrData = ""thisform.tcpServer.Object.LocalPort = 1001thisform.tcpServer.Object.Listen ■TcpServer.ConnectionRequest 事件 *** ActiveX Control Event ***LPARAMETERS requestIDIf thisform.tcpServer.OBJECT.State <> 0thisform.tcpServer.OBJECT.Closeendifthisform.tcpServer.OBJECT.Accept(requestID) 常数 值 说明 sckClosed 0 关闭(默认) sckOpen 1 打开 sckListening 2 侦听 sckConnected 7 已连接 sckError 9 发生了错误 ■TcpServer.DataArrive 事件 *** ActiveX Control Event ***LPARAMETERS bytestotalthisform.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事件中加入一些代码即可),我就不详述了。 

猫猫的心里话

加菲猫的VFP|狐友会社群接收投稿啦

加菲猫的VFP,用VFP不局限VFP,用VFP混合一切。无论是VFP,还是JS,还是C,只要能混合起来,都可以发表。

商业模式,销售技巧、需求规划、产品设计的知识通通可以发表。

暂定千字50元红包,,优秀的文章红包更大,一经发表,红包到手。

如何帮助使用VFP的人?

用VFP的人,有专业的,有非专业了,很多人其实是小白,问出的问题是小白,如果问题不对,我们引导他们问正确的问题。无论如何请不要嘲笑他们说帮助都不看,这么简单的问题都不会,嘲笑别人不行,而无法提出建设性答案,是很low的。

我们无论工作需要,还是有自己的软件,都是是需要真正的知识,如何让更多人学习真正的VFP知识呢,只需要点赞,在看,能转发朋友圈就更好了。

加菲猫的vfp倡导用"VFP极简混合开发,少写代码、快速出活,用VFP,但不局限于VFP,各种语言混合开发"

我已经带领一百多名会员成功掌到VFP的黑科技,进入了移动互联网时代,接下来我们要进入物联网领域。

2025年狐友会社群会员继续招募中

社群会员获取的权益有:

祺佑三层开发框架商业版(猫框),终身免费升级,终身技术支持。

开放的录播课程有:

微信小程序,微信公众号开发,H5 APP开发,Extjs BS开发,VFP面向对象进阶,VFP中间层开发。

源码类资源有:

支付组件源码,短信源码,权限组件源码,一些完整系统的源码。这个可以单独出售的,需要的可以联系我。

会员也可以实现群内资源对接,可以接分包,合作等各项商业或技术业务

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值