网络问题
怎样用winsock控件在两台电脑之间互相传送文件??? 问题点数:0、回复次数:2Top
1 楼lihonggen0(李洪根,MS MVP,标准答案来了)回复于 2003-09-01 13:09:20 得分 0
这儿有个实例:
http://www.dapha.net/down/list.asp?id=1014
http://www.dapha.net/down/list.asp?id=1781
http://www.dapha.net/down/list.asp?id=1821Top
2 楼frankgy(Frank)回复于 2003-09-01 14:25:21 得分 0
创建应用程序分别在两台机器上运行,其中一台,通常称为服务器,首先设置一个侦听端口(LocalPort属性)并调用listen方法。当客户机需要连接时(connect),就会发生ConnectionRequest事件。要完成连接,你可以在ConnectionRequest事件中调用Accept方法。建立连接后,任何一方计算机都可以发送、接收对方数据。如果你要发送数据,需调用SendData方法。当接收端有数据时,会发生DataArrival事件,调用DataArrival事件中的GetData方法就可以获得对方传送的数据。基本思路就是这样.
下面用程序来详细说明。
假设甲机为客户机,乙机为服务器,且其IP为192.168.0.1,接收端口为3000(选一个未被使用的端口即可)。首先在甲机客户端程序中加入一个Winsock控件,起名为sckconnect,并设置其属性(IP地址):RemoteHost=“192.168.0.1”,RemotePort=3000(侦听端口);再在乙机服务器程序中假如一个名为sckserver(0)的Winsock控件,其LocalPort=3000,
在乙机服务器程序中Form_Load()加入
sckserver(0).bind sckserver(0).LocalPort '与本地端口绑定
sckserver(0).listern ' 侦听
建立连接的程序如下:
甲机客户机要先请求连接
sckconnect.connect sckconnect.RemoteHost, sckconnect.RemotePort
此句执行时会触发服务器程序中的ConnectRequest事件,在此过程中决定是否建立连接,其代码如下:
Private sub sckserver_connectionrequest(index as Integer,Byval requestid as long)
if sckserver.count=1 then
load sckserver(1)
sckserver(1).accept requestId
end if
end sub
连接建立好以后,就可以应用SendData方法来传送数据。例如,如果是甲机要传送一个string的字符串,只需在代码中加入:
sckconnect.SendData string
甲机传送数据后,在乙机上会产生DataArrival事件,乙机可在DataArrival事件中用GetData接收数据:
Private sub sckserver_DataArrival(Index as integer,Byval BytesTotal as long)
dim sdata as string
sckserver(1).GetData sdata,vbstring
end sub
最后在退出程序前前闭Winsock控件
privat sub form_unload(cancel as integer)
if sckconnect.state < > sckclosed then
sckconnect.close
end if
end sub
Top




