VFP实现点对点通信实现方法及代码

来源:计算机等级考试    发布时间:2012-08-28    计算机等级考试视频    评论

  一、编程基础

  因为有关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事件中加入一些代码即可),我就不详述了。

视频学习

我考网版权与免责声明

① 凡本网注明稿件来源为"原创"的所有文字、图片和音视频稿件,版权均属本网所有。任何媒体、网站或个人转载、链接转贴或以其他方式复制发表时必须注明"稿件来源:我考网",违者本网将依法追究责任;

② 本网部分稿件来源于网络,任何单位或个人认为我考网发布的内容可能涉嫌侵犯其合法权益,应该及时向我考网书面反馈,并提供身份证明、权属证明及详细侵权情况证明,我考网在收到上述法律文件后,将会尽快移除被控侵权内容。

最近更新

社区交流

考试问答