winsock.sca

来自「用WINSOCK做的数据传送程序,分客户端与服务器端,非常实用,与您共享」· SCA 代码 · 共 308 行

SCA
308
字号
SCCTEXT 版本 4.0.0.2
PLATFORM C(8,0),UNIQUEID C(10,0),TIMESTAMP N(10,0),CLASS M(4,0),CLASSLOC M(4,0),BASECLASS M(4,0),OBJNAME M(4,0),PARENT M(4,0),PROPERTIES M(4,0),PROTECTED M(4,0),METHODS M(4,0),OBJCODE M(4,0),OLE M(4,0),OLE2 M(4,0),RESERVED1 M(4,0),RESERVED2 M(4,0),RESERVED3 M(4,0),RESERVED4 M(4,0),RESERVED5 M(4,0),RESERVED6 M(4,0),RESERVED7 M(4,0),RESERVED8 M(4,0),USER M(4,0)
936

[ RECORD]
[PLATFORM] COMMENT 
[UNIQUEID] Screen    
[START RESERVED1]
VERSION =   3.00[END RESERVED1]

[ RECORD]
[PLATFORM] WINDOWS 
[UNIQUEID] _0280MYBI0
[CLASS] dataenvironment
[BASECLASS] dataenvironment
[OBJNAME] Dataenvironment
[START PROPERTIES]
Left = 1
Top = 220
Width = 520
Height = 200
Name = "Dataenvironment"
[END PROPERTIES]
[START RESERVED2]
4[END RESERVED2]
[START RESERVED4]
1[END RESERVED4]

[ RECORD]
[PLATFORM] WINDOWS 
[UNIQUEID] _0280N60Y9
[CLASS] cursor
[BASECLASS] cursor
[OBJNAME] Cursor2
[PARENT] Dataenvironment
[START PROPERTIES]
Left = 150
Top = 20
Width = 100
Height = 90
Alias = "sendmess"
Database = ..\message_data\gold_message.dbc
CursorSource = "sendmess"
Name = "Cursor2"
[END PROPERTIES]

[ RECORD]
[PLATFORM] WINDOWS 
[UNIQUEID] _0280N7KU1
[CLASS] cursor
[BASECLASS] cursor
[OBJNAME] Cursor3
[PARENT] Dataenvironment
[START PROPERTIES]
Left = 288
Top = 13
Width = 100
Height = 90
Alias = "getmess"
Database = ..\message_data\gold_message.dbc
CursorSource = "getmess"
Name = "Cursor3"
[END PROPERTIES]

[ RECORD]
[PLATFORM] WINDOWS 
[UNIQUEID] _02Q0ZNGPV
[CLASS] cursor
[BASECLASS] cursor
[OBJNAME] Cursor1
[PARENT] Dataenvironment
[START PROPERTIES]
Left = 10
Top = 20
Width = 100
Height = 90
Alias = "sock"
Database = ..\message_data\gold_message.dbc
CursorSource = "sock"
Name = "Cursor1"
[END PROPERTIES]

[ RECORD]
[PLATFORM] WINDOWS 
[UNIQUEID] _0280MYBI1
[CLASS] app_form
[CLASSLOC] ..\..\gold_mis\libs\appuse.vcx
[BASECLASS] form
[OBJNAME] App_form1
[START PROPERTIES]
Height = 242
Width = 400
DoCreate = .T.
haveerror = 0
Name = "App_form1"
CMDRETURN1.Top = 205
CMDRETURN1.Left = 166
CMDRETURN1.Name = "CMDRETURN1"
STU_CAPTION1.FontSize = 30
STU_CAPTION1.Caption = "发送和接收消息"
STU_CAPTION1.Name = "STU_CAPTION1"
SHAPE1.Top = 169
SHAPE1.Left = 24
SHAPE1.Height = 5
SHAPE1.Width = 358
SHAPE1.Name = "SHAPE1"
SHAPE2.Top = 60
SHAPE2.Left = 21
SHAPE2.Height = 5
SHAPE2.Width = 358
SHAPE2.Name = "SHAPE2"
[END PROPERTIES]
[START METHODS]
PROCEDURE Refresh
release ccstring
ENDPROC
PROCEDURE Init
fhandle=FCREAT("GETMESS.TXT")&&生成并打开文件(返回值为数字型参数),执行此操作时将使文件变为空
IF fhandle<0                 &&文件不存在
	=MESSAGEBOX("系统错误,无法打开文件,请和程序设计人员联系",16,"系统信息")
ENDIF
=FCLOSE(fhandle)             &&关闭文件
SELE sock
ipaddres=ALLTRIM(ip)         &&读IP地址和端口号
rport=ALLTRIM(port)
THISFORM.sock.remotehost=ipaddres
THISFORM.sock.remoteport=rport
*!*	thisform.haveerror=0   &&数据交换出错标志

ENDPROC
PROCEDURE CMDRETURN1.Click
RESULT=MESSAGEBOX("您要返回吗?",4+32,"信息窗口") 
if result=6
  release thisform
endif
ENDPROC
[END METHODS]
[START RESERVED3]
haveerror 数据交换出错标志
[END RESERVED3]

[ RECORD]
[PLATFORM] WINDOWS 
[UNIQUEID] _0280MYBIB
[CLASS] bas_cmdbutton
[CLASSLOC] ..\..\gold_mis\libs\baseclass.vcx
[BASECLASS] commandbutton
[OBJNAME] Bas_cmdbutton1
[PARENT] App_form1
[START PROPERTIES]
Top = 206
Left = 84
Caption = "开始连接"
Name = "Bas_cmdbutton1"
[END PROPERTIES]
[START METHODS]
PROCEDURE Click
***********************************建立连接***********************************
THISFORM.INFO.CAPTION="正在试图和服务器建立连接,请稍侯"
THISFORM.sock.OBJECT.CONNECT()    && 建立连接
THIS.ENABLED=.F.
THISFORM.CMDRETURN1.ENABLED=.F.
num=0
DO WHILE num<100000 AND THISFORM.sock.OBJECT.state!=7
	num=num+1
ENDDO
*****************************若连接成功,将数据按100条打包发送******************
IF THISFORM.sock.OBJECT.state=7    && 7为已连接
	THISFORM.INFO.CAPTION="已和服务器建立连接,正在向服务器发送数据"
	SELE sendmess
	COUNT TO ctotal
	ctotal=ctotal/100
	i=1
	DO WHILE i<ctotal
		GO (i-1)*100+1
		COPY TO sendmess.txt TYPE SDF  NEXT 100 FOR l_flag=.F.
		fhandle=FOPEN("SENDMESS.TXT",12)
		IF fhandle<0
			=MESSAGEBOX("系统错误,无法打开文件,请和程序设计人员联系",16,"系统信息")
		ENDIF
		nsize=FSEEK(fhandle,0,2)
		=FSEEK(fhandle,0,0)
		cstring=FREAD(fhandle,nsize)
		=FCLOSE(fhandle)
		THISFORM.sock.OBJECT.senddata(cstring)
		GO (i-1)*100+1
		i=i+1
	ENDD
	IF ctotal!=INT(ctotal)   && 记录条数不为100的整倍数
		GO (i-1)*100+1
		COPY TO sendmess.txt TYPE SDF REST FOR l_flag=.F.  && 将剩余部分复制成文本文件
		fhandle=FOPEN("SENDMESS.TXT",12)
		IF fhandle<0
			=MESSAGEBOX("系统错误,无法打开文件,请和程序设计人员联系",16,"系统信息")
		ENDIF
		nsize=FSEEK(fhandle,0,2)
		=FSEEK(fhandle,0,0)
		cstring=FREAD(fhandle,nsize)
		=FCLOSE(fhandle)
	ELSE
		cstring=""           && 记录条数是100的整倍数,将字符串设为空
	ENDIF
	csend=cstring+"?"+P_FENDH      &&在字符串中加入结束标志?和分店号
	THISFORM.sock.OBJECT.senddata(csend)  && 将数据发送给远程计算机。
	IF thisform.haveerror=0                  &&没有错误信息
		REPL ALL l_flag WITH .T.    &&设置传输成功标志
	ENDIF
ELSE
	THISFORM.INFO.CAPTION="  无法和服务器建立连接,请确认MODEM已打开"+CHR(13)+"并且中心服务器已打开"
	THISFORM.sock.OBJECT.CLOSE()    &&关闭TCP连接
	THIS.ENABLED=.T.
	THISFORM.CMDRETURN1.ENABLED=.T.
ENDIF

ENDPROC
[END METHODS]

[ RECORD]
[PLATFORM] WINDOWS 
[UNIQUEID] _0280MYBIC
[CLASS] bas_label
[CLASSLOC] ..\..\gold_mis\libs\baseclass.vcx
[BASECLASS] label
[OBJNAME] INFO
[PARENT] App_form1
[START PROPERTIES]
AutoSize = .F.
BackStyle = 0
Caption = ""
Height = 43
Left = 33
Top = 74
Width = 339
Name = "INFO"
[END PROPERTIES]

[ RECORD]
[PLATFORM] WINDOWS 
[UNIQUEID] _02G186VLB
[CLASS] olecontrol
[BASECLASS] olecontrol
[OBJNAME] SOCK
[PARENT] App_form1
[START PROPERTIES]
Top = 91
Left = 173
Height = 100
Width = 100
Name = "SOCK"
[END PROPERTIES]
[START METHODS]
PROCEDURE Error
*** ActiveX 控件事件 ***
LPARAMETERS number, description, scode, source, helpfile, helpcontext, canceldisplay
thisform.haveerror=1
ENDPROC
PROCEDURE DataArrival
*** ActiveX 控件事件 ***取数据
LPARAMETERS bytestotal              &&可获取的数据总数量。
PUBLIC ccstring
THISFORM.INFO.CAPTION="正在从中心读回数据"
IF !FILE("GETMESS.TXT")
	fhandle=FCREAT("GETMESS.TXT")
ELSE
	fhandle=FOPEN("GETMESS.TXT",12)
ENDIF
IF fhandle<0
	=MESSAGEBOX("系统错误,无法打开文件,请和程序设计人员联系",16,"系统信息")
ENDIF
ccstring=""
THIS.OBJECT.GETDATA(@ccstring,17)   && 返回存储获取数据的地址
cend=""
cend=SUBSTR(ccstring,bytestotal,1)  && 取接收数的末位数,判断该数据是否为结束符
IF cend="?"
	cother=SUBSTR(ccstring,1,bytestotal-1) &&将结束符与分店号去掉,组成真正的数据信息
ELSE
	cother=ccstring
ENDIF
=FSEEK(fhandle,0,2)                 && 测定文件大小,在一个打开的文件中移动文件指针
=FWRITE(fhandle,cother)             && 写一个字符串到打开的文件中
=FCLOSE(fhandle)                    && 关闭文件
IF cend="?"
	SELE getmess
	APPE FROM getmess.txt TYPE SDF
	THISFORM.INFO.CAPTION="已接受完数据,请退出并断掉MODEM"+CHR(13)+"然后进行本地处理"
	THIS.OBJECT.CLOSE()             && 关闭连接
	THISFORM.CMDRETURN1.ENABLED=.T.
ENDIF


ENDPROC
[END METHODS]
[BINSTART OLE]
CHECKSUM=28408
[BINEND OLE]
[BINSTART OLE2]
CHECKSUM=13417
[BINEND OLE2]

[ RECORD]
[PLATFORM] COMMENT 
[UNIQUEID] RESERVED  
[START PROPERTIES]
隶书, 16, 12, 8, 18, 14, 16, 2, 2宋体, 1, 9, 7, 14, 10, 13, 2, 2[END PROPERTIES]
[EOF]

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?