![]() |
#2
sam_jiang5 天前 23:01
接上楼
客户端代码: 10/15 更新互动后的UI界面,以及演示如何触发同名事件或方法 ![]() ************************************************** *-- Form: form1 (d:\documents\visual foxpro 项目\foxsocket_client.scx) *-- 父类: form *-- 基类: form *-- 时间戳: 10/14/25 11:35:03 PM * DEFINE CLASS form1 AS form Height = 417 Width = 590 DoCreate = .T. AutoCenter = .T. Caption = "Foxsocket 客户端演示demo" Name = "Form1" ADD OBJECT foxsocket1 AS foxsocket WITH ; Top = 49, ; Left = 552, ; Height = 17, ; Width = 24, ; Name = "Foxsocket1" ADD OBJECT label1 AS label WITH ; AutoSize = .T., ; Caption = "IP 地址:", ; Height = 16, ; Left = 13, ; Top = 47, ; Width = 56, ; Name = "Label1" ADD OBJECT label2 AS label WITH ; AutoSize = .T., ; Caption = "端 口: ", ; Height = 16, ; Left = 199, ; Top = 47, ; Width = 50, ; Name = "Label2" ADD OBJECT text1 AS textbox WITH ; Alignment = 3, ; Value = 8888, ; Height = 20, ; InputMask = "9999", ; Left = 249, ; Top = 45, ; Width = 50, ; Name = "Text1" ADD OBJECT command1 AS commandbutton WITH ; AutoSize = .T., ; Top = 43, ; Left = 379, ; Height = 25, ; Width = 72, ; Caption = "连接服务器", ; Name = "Command1" ADD OBJECT edit1 AS editbox WITH ; Height = 288, ; Left = 12, ; Top = 72, ; Width = 564, ; Name = "Edit1" ADD OBJECT edit2 AS editbox WITH ; Height = 50, ; Left = 12, ; Top = 365, ; Width = 504, ; Name = "Edit2" ADD OBJECT command2 AS commandbutton WITH ; Top = 388, ; Left = 516, ; Height = 25, ; Width = 60, ; Caption = "发 送", ; Name = "Command2" ADD OBJECT txt_ip1 AS txt_ip WITH ; Left = 73, ; Top = 44, ; Name = "Txt_ip1" ADD OBJECT label3 AS label WITH ; Caption = (chr(13)+ "这是一个Foxsocket 客户端的演示程序..."), ; Height = 37, ; Left = 12, ; Top = 0, ; Width = 565, ; Name = "Label3" PROCEDURE foxsocket1.connect LPARAMETERS remotehost,remoteport ********************************************* *子类connect事件中调用父类的方法: *if PCOUNT()=0 &&定义没有参数时的行为 * input your code here * ...... *ELSE * DODEFAULT(remotehost,remoteport) &&不能漏掉参数 *ENDIF ********************************************* IF PCOUNT()=0 SET MESSAGE TO "服务器已接受连接请求,可以通讯。。。" ="已连接" thisform.edit1.Value=thisform.edit1.Value+"服务器已接受连接请求。。。"+CHR(13) ELSE DODEFAULT(remotehost,remoteport) &&调用父类代码 ENDIF ENDPROC PROCEDURE foxsocket1.dataarrival LPARAMETERS bytestotal IF PCOUNT()=1 lcbuffer=REPLICATE(CHR(0),bytestotal) thisform.foxsocket1.getData(@lcbuffer) thisform.edit1.Value=thisform.edit1.Value+lcbuffer+CHR(13) ENDIF ENDPROC PROCEDURE foxsocket1.close LPARAMETERS hsocket IF PCOUNT()=0 MESSAGEBOX("远方主机关闭连接") SET MESSAGE TO "远方主机关闭连接。。。" ="等待连接服务器" ELSE DODEFAULT(hsocket) ENDIF ENDPROC PROCEDURE foxsocket1.connectionrequest LPARAMETERS requestid ENDPROC PROCEDURE command1.Click thisform.edit1.Value=thisform.edit1.Value+"初始化foxsocket..."+CHR(13) thisform.foxsocket1.createsocket() thisform.edit1.Value=thisform.edit1.Value+"正在连接远方ip:"; +thisform.txt_ip1.value+SPACE(2)+; TRANSFORM(thisform.text1.Value)+"端口..."+CHR(13) thisform.foxsocket1.connect(thisform.txt_ip1.Value,thisform.text1.Value) ENDPROC PROCEDURE command2.Click IF !EMPTY(thisform.edit2.value) thisform.foxsocket1.senddata(thisform.edit2.Value) thisform.edit2.Value="" ENDIF ENDPROC PROCEDURE txt_ip1.Init lchostname=thisform.foxsocket1.getlocalhost() this.Value=thisform.foxsocket1.getipadress(lchostname) ENDPROC ENDDEFINE * *-- EndDefine: form1 ************************************************** [此贴子已经被作者于2025-10-15 08:59编辑过] |
感兴趣的可以复制代码运行试试看,不过调试期间可能会频繁切换设计模式和运行模式,每次要换个端口,因为端口通常会被锁定5分钟左右。
服务端代码:
10/15 更新互动后的UI界面,以及演示如何触发同名事件或方法

**************************************************
*-- Form: form1 (d:\documents\visual foxpro 项目\foxsocket_server.scx)
*-- 父类: form
*-- 基类: form
*-- 时间戳: 10/14/25 11:33:13 PM
*
DEFINE CLASS form1 AS form
Height = 417
Width = 590
DoCreate = .T.
AutoCenter = .T.
Caption = "Foxsocket 服务端演示demo"
Name = "Form1"
ADD OBJECT foxsocket1 AS foxsocket WITH ;
Top = 49, ;
Left = 552, ;
Height = 17, ;
Width = 24, ;
Name = "Foxsocket1"
ADD OBJECT label1 AS label WITH ;
AutoSize = .T., ;
Caption = "IP 地址:", ;
Height = 16, ;
Left = 13, ;
Top = 47, ;
Width = 56, ;
Name = "Label1"
ADD OBJECT label2 AS label WITH ;
AutoSize = .T., ;
Caption = "端 口: ", ;
Height = 16, ;
Left = 199, ;
Top = 47, ;
Width = 50, ;
Name = "Label2"
ADD OBJECT text1 AS textbox WITH ;
Alignment = 3, ;
Value = 8888, ;
Height = 20, ;
InputMask = "9999", ;
Left = 249, ;
Top = 45, ;
Width = 50, ;
Name = "Text1"
ADD OBJECT command1 AS commandbutton WITH ;
AutoSize = .T., ;
Top = 43, ;
Left = 379, ;
Height = 25, ;
Width = 60, ;
Caption = "启动服务", ;
Name = "Command1"
ADD OBJECT edit1 AS editbox WITH ;
Height = 288, ;
Left = 12, ;
Top = 72, ;
Width = 564, ;
Name = "Edit1"
ADD OBJECT edit2 AS editbox WITH ;
Height = 50, ;
Left = 12, ;
Top = 365, ;
Width = 504, ;
Name = "Edit2"
ADD OBJECT command2 AS commandbutton WITH ;
Top = 388, ;
Left = 516, ;
Height = 25, ;
Width = 60, ;
Caption = "发 送", ;
Name = "Command2"
ADD OBJECT txt_ip1 AS txt_ip WITH ;
Left = 73, ;
Top = 44, ;
Name = "Txt_ip1"
ADD OBJECT label3 AS label WITH ;
Caption = (chr(13)+ "这是一个Foxsocket 服务端的演示程序..."), ;
Height = 37, ;
Left = 12, ;
Top = 0, ;
Width = 565, ;
Name = "Label3"
PROCEDURE foxsocket1.connectionrequest
LPARAMETERS requestid
MESSAGEBOX("检测到连接请求!",0+64,"通知",2)
this.accept(requestid)
IF this.state=7
thisform.edit1.Value=thisform.edit1.Value+"客户端已连接。。。"+CHR(13)
ELSE
thisform.edit1.Value=thisform.edit1.Value+"你已拒绝连接请求。。。"+CHR(13)
ENDIF
ENDPROC
PROCEDURE foxsocket1.close
LPARAMETERS hsocket
*********************************************
*子类close事件中调用父类的方法:
*if PCOUNT()=0 &&定义没有参数时的行为
* input your code here
*ELSE
* DODEFAULT(hsocket) &&不能漏掉参数
*ENDIF
*********************************************
IF PCOUNT()=0
MESSAGEBOX("远方主机关闭连接")
SET MESSAGE TO "远方主机已关闭连接。。。"
thisform.edit1.Value=thisform.edit1.Value+"远方主机已关闭连接。。"+CHR(13)
ELSE
DODEFAULT(hsocket)
ENDIF
ENDPROC
PROCEDURE foxsocket1.dataarrival
LPARAMETERS bytestotal
IF PCOUNT()=1
lcbuffer=REPLICATE(CHR(0),bytestotal)
thisform.foxsocket1.getData(@lcbuffer)
thisform.edit1.Value=thisform.edit1.Value+lcbuffer+CHR(13)
ENDIF
ENDPROC
PROCEDURE command1.Click
thisform.edit1.Value=thisform.edit1.Value+"初始化foxsocket..."+CHR(13)
thisform.foxsocket1.createsocket()
thisform.edit1.Value=thisform.edit1.Value+"正在绑定"+TRANSFORM(thisform.text1.Value)+"端口..."+CHR(13)
thisform.foxsocket1.bind(thisform.txt_ip1.Value,thisform.text1.Value)
thisform.edit1.Value=thisform.edit1.Value+"进入监听状态..."+CHR(13)
thisform.foxsocket1.listen()
IF thisform.foxsocket1.state=2
SET MESSAGE TO "服务已就绪。。。"
ENDIF
="已启动"
=.f.
ENDPROC
PROCEDURE command2.Click
IF !EMPTY(thisform.edit2.value)
thisform.foxsocket1.senddata(thisform.edit2.Value)
thisform.edit2.Value=""
ENDIF
ENDPROC
PROCEDURE txt_ip1.Init
lchostname=thisform.foxsocket1.getlocalhost()
this.Value=thisform.foxsocket1.getipadress(lchostname)
ENDPROC
ENDDEFINE
*
*-- EndDefine: form1
**************************************************
[此贴子已经被作者于2025-10-15 08:57编辑过]