【vfp开源代码栏目提醒】:文章导读:在新的一年中,各位网友都进入紧张的学习或是工作阶段。网学会员整理了vfp开源代码-Client.prg的相关内容供大家参考,祝大家在新的一年里工作和学习顺利!
PUBLIC frmMyClient
frmMyClient=CREATEOBJECT("Form1")
frmMyClient.Visible=.T.
DEFINE CLASS Form1 AS Form
Height = 105
Width = 451
DoCreate = .T.
AutoCenter = .T.
Caption = "最简单的WinSock控件示例--客户端"
MaxButton = .F.
Name = "Form1"
PROCEDURE Init
Application.AutoYield=.F.
*!* 添加自定义属性用于判断是否已经将数据发送完毕
This.AddProperty("IsSendComplete",.F.)
This.Label3.Caption=""
ENDPROC
PROCEDURE Unload
Application.AutoYield=.T.
ENDPROC
ADD OBJECT Label1 AS Label WITH ;
Caption = "要发送的信息:",;
Height = 12,;
Left = 12,;
Top = 14,;
Width = 78,;
Name = "Label1"
ADD OBJECT Label2 AS Label WITH ;
Caption = "接收到的信息:",;
Height = 12,;
Left = 12,;
Top = 44,;
Width = 78,;
Name = "Label2"
ADD OBJECT Label3 AS Label WITH ;
Caption = "label3",;
Height = 12,;
Left = 12,;
Top = 84,;
Width = 378,;
Name = "Label3"
ADD OBJECT txtSend AS TextBox WITH ;
Height = 22,;
Left = 92,;
Top = 12,;
Width = 264,;
Name = "txtSend"
ADD OBJECT txtRetu AS TextBox WITH ;
Height = 22,;
Left = 92,;
Top = 42,;
Width = 265,;
ForeColor = RGB(0,0,255),;
Name = "txtRetu"
ADD OBJECT Line1 AS Line WITH ;
Height = 0,;
Left = 0,;
Top = 80,;
Width = 450,;
BorderColor = RGB(192,192,192),;
Name = "Line1"
ADD OBJECT Command1 AS CommandButton WITH ;
Top = 12,;
Left = 366,;
Height = 52,;
Width = 79,;
Caption = "发送信息(\<S)",;
Name = "Command1"
PROCEDURE Command1.Click
IF EMPTY(Thisform.txtSend.Value) &&判断是否有数据发送
=MESSAGEBOX("请输入要发送的信息,然后执行信息发送!",0+16,"提示")
RETURN
ENDIF
Thisform.txtRetu.Value="" &&清空接收信息文本框的值
lcTimeOut=10 &&定义一个超时限制,为10秒钟
*!* 该示例是在本机上同时执行服务器与客户端程序,所以直接将本机IP
*!* 作为Connect(RemoteHost,RemotePort)方法要求的RemoteHost
lcRemoteHostIP=Thisform.WinSock1.OBJECT.LocalIP
lcRemotePort=2001 &&定义一个连接端口号,注意:要保证服务器也使用相同的端口号
Thisform.WinSock1.OBJECT.Close &&首先关闭连接
Thisform.Label3.Caption="正在连接..."
Thisform.WInSock1.OBJECT.Connect(lcRemoteHostIP,lcRemotePort) &&建立到服务器的连接
lcStartSec=SECONDS() &&取得以秒为单位的当前时间
*!* 等待连接到服务器
DO WHILE Thisform.WinSock1.OBJECT.State#7
INKEY(0.1) && 等待时间间隔,该语句用于在进行循环时减少对CPU资源的占用
IF SECONDS()-lcStartSec>lcTimeOut &&如果超时
Thisform.Label3.Caption= "连接服务器超时..."
Thisform.Winsock1.OBJECT.Close
RETURN &&退出程序,停止执行下面语句
ENDIF
ENDDO
Thisform.Label3.Caption="已经连接到服务器..." &&没有退出,继续执行,表示已经连接成功
*!* 将数据是否发送完标志设置为.F.,如果发送完毕,
*!* WinSock1.SendComplete事件将将该属性设置为.T.
Thisform.IsSendComplete=.F.
Thisform.WinSock1.OBJECT.SendData(ALLTRIM(Thisform.txtSend.Value)) &&进行数据发送
*!* 等待数据发送完毕
DO WHILE NOT Thisform.IsSendComplete
INKEY(0.1)
IF SECONDS()-lcStartSec>lcTimeOut &&如果超时
Thisform.Label3.Caption="数据发送超时..."
Thisform.WinSock1.OBJECT.Close
RETURN &&退出程序,停止执行下面语句
ENDIF
ENDDO
*!* 下面的语句得以继续执行表示数据已经发送完毕
Thisform.Label3.Caption="数据发送完毕!"
*!* 等待由服务器返回的信息,有返回信息,将由Winsock1.DataArrival
*!* 事件将返回信息写入到txtRetu文本框中
DO WHILE EMPTY(Thisform.txtRetu.Value)
INKEY(0.1)
IF SECONDS()-lcStartSec>lcTimeOut
Thisform.Label3.Value="服务器信息返回超时.."
Thisform.Winsock1.OBJECT.Close
RETURN
ENDIF
ENDDO
*!* 下面的语句得以继续执行表示已经从服务器返回信息
Thisform.WinSock1.OBJECT.Close
Thisform.Label3.Caption="信息发送/接收完毕!"
ENDPROC
ADD OBJECT WinSock1 AS WinSockClass WITH ;
Top = 72,;
Left = 408,;
Height = 19,;
Width = 19,;
Name = "WinSock1"
PROCEDURE WinSock1.DataArrival &&有新数据到达
LPARAMETERS BytesTotal
LOCAL lcBuffer
*!* 定义lcBuffer长度等于可获取数据的总字节长度
lcBuffer=SPACE(BytesTotal)
Thisform.Label3.Caption="正在接收数据..."
*!* 获得所接收到的数据
This.object.GetData(@lcBuffer)
Thisform.txtRetu.Value = lcBuffer
ENDPROC
PROCEDURE WinSock1.Close
This.OBJECT.Close()
ENDPROC
PROCEDURE WinSock1.SendComplete &&数据发送完毕
*!* 数据发送完毕,将表单的自定义属性IsSendComplete设置为.T.,表示数据
*!* 已经发送完毕,用于终止在Command1.Click中执行SendData方法的等待
Thisform.IsSendComplete=.T.
ENDPROC
ENDDEFINE
DEFINE CLASS WinSockClass AS OleControl
OleClass="MSWinSock.WinSock"
ENDDEFINE
上一篇:
CLEANUP.PRG
下一篇:
关于大学英语教学