VFP实现点对点通信实现方法及代码
首先,编程基础
因为关于Winsock控件的资料在很多媒体上都有介绍,为了节省篇幅我就不详细介绍了。请查找相关信息。这里我只简单说一下要用到的一些设置。为了保证通信的可靠性,下面的程序使用了TCP/IP协议,客户端和服务器端都使用了预设的1001端口(实际操作中可以自己更改)。
二、界面设计
1.客户
客户
上面的接口中有7个对象,属性Name=TcpClient,RemoteHostport=1001。其余属性可以根据需要自行设置,其余对象的设置也可以自行设置。
2.服务器端
计算机网络服务器
上面的接口中有五个对象,属性Name=TcpServer,LocalHostport=1001。该属性必须与客户端的远程主机端口一致,其余属性可以根据需要自行设置,以及其他对象的设置。
第三,实现代码
1.客户
■初始化事件的形式:
公共数据
strData = \"\ "
this form . TCP client . remote host = \ " 192 . 41 . 242 . 18 \ "
this form . TCP client . remote port = 1001
■“连接”按钮。点击事件
this form . TCP client . object . connect(\ " 192 . 41 . 242 . 18 \ ",1001)
这个。启用= .f。
■TCP客户端。数据到达事件
*** ActiveX控件事件***
LPARAMETERS bytestotal
this form . TCP client . object . get data(@ strData)
this form . txtoutput 1 . value = strData
■TxtSend1。InteractiveChange事件
this form . TCP client . object . send data(this。值)
2.服务器端
■初始化事件的形式:
公共数据
strData = \"\ "
this form . TCP server . object . local port = 1001
this form . TCP server . object . listen
■TcpServer。ConnectionRequest事件
*** ActiveX控件事件***
LPARAMETERS requestID
如果this form . TCP server . object . state为0
this form . TCP server . object . close
结束条件
这个表格。TCP服务器。对象。接受(RequestID)常量值描述
SckClosed 0关闭(默认)
SckOpen 1打开
听力2
SckConnected 7已连接。
sckError 9中出现错误。
■TcpServer。数据到达事件
*** ActiveX控件事件***
LPARAMETERS bytestotal
this form . TCP client . object . get data(@ strData)
this form . txtoutput 1 . value = strData
■TxtSendData。InteractiveChange事件
this form . TCP server . object . send data(this。值)
现在我们可以运行它,看看它是如何工作的,要么在同一台机器上,要么在局域网上。
注意
一定要在Winsock对象代码中加入VFP的关键字对象,否则不可能成功(我也是经过无数次失败才得到答案的)。
四。扩张和其他
我们用Winsock控件简单实现了点对点通信程序。界面比较简单,功能也比较少,读者可以进行相应的扩展。我来说说文件传输。
在上面的程序中,已经实现了实时的点对点通信,但是要用这个来进行文件传输,还有一个很大的问题需要解决。因为VFP没有提供二进制变量的定义,为了将文件传输到,必须解决ASCII码大于128的字符传输问题。但是,在6.0版中,提供了filetostr()和strtofile()文件与内存变量之间的转换函数。但在具体操作中,我发现使用这两个函数只能传输不超过8K字节的文件,而且要求是文本类型。因此,我们不能采用这种解决方案。好在VFP6.0提供了两个非常有用的字节处理函数,bintoc()和ctobin(),其中bintoc()函数将长整型数据转换为对应的4字节字符(默认值,可以更改),而ctobin()函数则相反。有关详细信息,请参考VFP帮助。这样,我们就可以利用这两个函数来传输文件了。有了以上基础,应该就知道怎么写代码了(只需要给Winsock对象的DataArrive事件加一些代码就可以了),就不赘述了。
0条评论