易语言 客户端如何判断与服务器掉线

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了易语言 客户端如何判断与服务器掉线相关的知识,希望对你有一定的参考价值。

在客户端组件,下面有个
“子程序
_客户1_连接断开“
的事件,当与服务器断开,他会执行此事件下的代码!
你可以在此事件设置:
比如,当如果服务器断开,我需要重新连接服务器。那么此事件下加入命令:
"客户1.连接("127.0.0.1”,19730)
重新与服务器取得连接!
如果不需要重新与服务器连接,只想取到客户端是否与服务器断开。那么,你可以在此事件下面设置一个
程序集变量

全局变量
当此事件被调用,就赐值给这个变量,我这里赐
1。然后可以检测此变量的值,如果是1,那么就说明已经和服务器断开了,重新和服务器连接的时候,再赐值给变量为
0
。这样当变量为
1(说明已经断开),当变量为
0
(说明已经连接)。
请采纳!
参考技术A 为什么需要心跳连接主要是判断当前连接是否是有效的、可被使用的。在实际应用中假设一段时间没有数据传输时候理论上说应该连接是没有问题的,但是网络复杂,中途出现问题也是常见的,网线被掐断了、对方进程挂掉了、频繁丢包等,这时候tcp连接是不可使用的,但是对于应用层并不知道,如果需知道网络情况则要很复杂的超时进行了解,tcp从底层就实现了这样的功能。实现:public
void
heartcheck(final
clientsocket
socket)
//心跳连接(检查断链)
服务器断线重连
new
thread(new
runnable()

public
void
run()

while
(true)

if(socket.isconnectstatus()==false)break;
try

socket.sendheartcheck();//socket.sendurgentdata(0xff);
//system.out.println("目前是正常的!");
thread.sleep(10
*
1000);

catch
(ioexception
e)

//
todo
auto-generated
catch
block
system.out.println("心跳检测到客户端"+socket.getserver_id()+"掉线");
socket.destroy();
break;

//
发送心跳包
catch
(exception
e)

//
todo
auto-generated
catch
block
//e.printstacktrace();



).start();
参考技术B 选择服务器,左边参数下面有一个用户离开。每次断线都会返回数据的。
.版本
2
.
子程序

_服务器1_客户离开
参考技术C 易语言给所有的函数都做了提示的好不?如果我没猜错,易语言的提示下面写的是。如果返回-1,则代表通信失败。

绝对高分求客户端向服务器上传与下载文件的程序

我想用VB做一个程序可以向服务器上传文件,然后保存在服务器硬盘空间里,当我想阅读时,可以在服务器上找到这个文件,并把它打开,进行浏览.把它下载到本机来打开也可以.(如果你知道其中某方面也麻烦你告诉我),在这里我先谢谢各位来帮忙啦,快来帮一下小弟吧,各位大侠.
xiaozhuge0825@163.com,这是我的邮箱,谢谢你啦!我的QQ是77977652请多多帮忙.

==========上传部分================

一 WEB部分
1 首先把WEB页获得本地要上传的文件名
2 WEB通过脚本把本地文件名(绝对路径)给客户端组件
3 WEB脚本控制组件开始传送数据
4 最后判断是否传输成功

二 组件部分
1 建立INTERNET连接
2 连接FTP服务器
3 获得本地文件名(绝对路径)
4 返回远程即将保存的文件名
5 传送数据
6 判断是否传输成功,返回状态

WEB页获取本地文件

组件返回远程文件名

组件传送数据

返回

本例在VB6.0 +WIN2000+ IIS5.0 + SERV-U 5.0 下调试成功

VB部分
一、建立一个ActiveX DLL工程
二、更改工程名FtpConn
三、更改类名:clsPutFile
四、加入一个空模块到工程中,此模块主要对需要使用的函数进行声明,在此不多做解释,代码如下:
Option Explicit

Declare Function GetProcessHeap Lib "kernel32" () As Long
Declare Function HeapAlloc Lib "kernel32" (ByVal hHeap As Long, ByVal dwFlags As Long, ByVal dwBytes As Long) As Long
Declare Function HeapFree Lib "kernel32" (ByVal hHeap As Long, ByVal dwFlags As Long, lpMem As Any) As Long
Public Const HEAP_ZERO_MEMORY = &H8
Public Const HEAP_GENERATE_EXCEPTIONS = &H4

Declare Sub CopyMemory1 Lib "kernel32" Alias "RtlMoveMemory" ( _
hpvDest As Any, ByVal hpvSource As Long, ByVal cbCopy As Long)
Declare Sub CopyMemory2 Lib "kernel32" Alias "RtlMoveMemory" ( _
hpvDest As Long, hpvSource As Any, ByVal cbCopy As Long)

Public Const MAX_PATH = 260
Public Const NO_ERROR = 0
Public Const FILE_ATTRIBUTE_READONLY = &H1
Public Const FILE_ATTRIBUTE_HIDDEN = &H2
Public Const FILE_ATTRIBUTE_SYSTEM = &H4
Public Const FILE_ATTRIBUTE_DIRECTORY = &H10
Public Const FILE_ATTRIBUTE_ARCHIVE = &H20
Public Const FILE_ATTRIBUTE_NORMAL = &H80
Public Const FILE_ATTRIBUTE_TEMPORARY = &H100
Public Const FILE_ATTRIBUTE_COMPRESSED = &H800
Public Const FILE_ATTRIBUTE_OFFLINE = &H1000

Type FILETIME
dwLowDateTime As Long
dwHighDateTime As Long
End Type

Type WIN32_FIND_DATA
dwFileAttributes As Long
ftCreationTime As FILETIME
ftLastAccessTime As FILETIME
ftLastWriteTime As FILETIME
nFileSizeHigh As Long
nFileSizeLow As Long
dwReserved0 As Long
dwReserved1 As Long
cFileName As String * MAX_PATH
cAlternate As String * 14
End Type

Public Const ERROR_NO_MORE_FILES = 18

Public Declare Function InternetFindNextFile Lib "wininet.dll" Alias "InternetFindNextFileA" _
(ByVal hFind As Long, lpvFindData As WIN32_FIND_DATA) As Long

Public Declare Function FtpFindFirstFile Lib "wininet.dll" Alias "FtpFindFirstFileA" _
(ByVal hFtpSession As Long, ByVal lpszSearchFile As String, _
lpFindFileData As WIN32_FIND_DATA, ByVal dwFlags As Long, ByVal dwContent As Long) As Long

Public Declare Function FtpGetFile Lib "wininet.dll" Alias "FtpGetFileA" _
(ByVal hFtpSession As Long, ByVal lpszRemoteFile As String, _
ByVal lpszNewFile As String, ByVal fFailIfExists As Boolean, ByVal dwFlagsAndAttributes As Long, _
ByVal dwFlags As Long, ByVal dwContext As Long) As Boolean

Public Declare Function FtpPutFile Lib "wininet.dll" Alias "FtpPutFileA" _
(ByVal hFtpSession As Long, ByVal lpszLocalFile As String, _
ByVal lpszRemoteFile As String, _
ByVal dwFlags As Long, ByVal dwContext As Long) As Boolean

Public Declare Function FtpSetCurrentDirectory Lib "wininet.dll" Alias "FtpSetCurrentDirectoryA" _
(ByVal hFtpSession As Long, ByVal lpszDirectory As String) As Boolean
' Initializes an application's use of the Win32 Internet functions
Public Declare Function InternetOpen Lib "wininet.dll" Alias "InternetOpenA" _
(ByVal sAgent As String, ByVal lAccessType As Long, ByVal sProxyName As String, _
ByVal sProxyBypass As String, ByVal lFlags As Long) As Long

' User agent constant.
Public Const scUserAgent = "vb wininet"

' Use registry access settings.
Public Const INTERNET_OPEN_TYPE_PRECONFIG = 0
Public Const INTERNET_OPEN_TYPE_DIRECT = 1
Public Const INTERNET_OPEN_TYPE_PROXY = 3
Public Const INTERNET_INVALID_PORT_NUMBER = 0

Public Const FTP_TRANSFER_TYPE_ASCII = &H1
Public Const FTP_TRANSFER_TYPE_BINARY = &H1
Public Const INTERNET_FLAG_PASSIVE = &H8000000

' Opens a HTTP session for a given site.
Public Declare Function InternetConnect Lib "wininet.dll" Alias "InternetConnectA" _
(ByVal hInternetSession As Long, ByVal sServerName As String, ByVal nServerPort As Integer, _
ByVal sUsername As String, ByVal sPassword As String, ByVal lService As Long, _
ByVal lFlags As Long, ByVal lContext As Long) As Long

Public Const ERROR_INTERNET_EXTENDED_ERROR = 12003
Public Declare Function InternetGetLastResponseInfo Lib "wininet.dll" Alias "InternetGetLastResponseInfoA" ( _
lpdwError As Long, _
ByVal lpszBuffer As String, _
lpdwBufferLength As Long) As Boolean

' Number of the TCP/IP port on the server to connect to.
Public Const INTERNET_DEFAULT_FTP_PORT = 21
Public Const INTERNET_DEFAULT_GOPHER_PORT = 70
Public Const INTERNET_DEFAULT_HTTP_PORT = 80
Public Const INTERNET_DEFAULT_HTTPS_PORT = 443
Public Const INTERNET_DEFAULT_SOCKS_PORT = 1080

Public Const INTERNET_OPTION_CONNECT_TIMEOUT = 2
Public Const INTERNET_OPTION_RECEIVE_TIMEOUT = 6
Public Const INTERNET_OPTION_SEND_TIMEOUT = 5

Public Const INTERNET_OPTION_USERNAME = 28
Public Const INTERNET_OPTION_PASSWORD = 29
Public Const INTERNET_OPTION_PROXY_USERNAME = 43
Public Const INTERNET_OPTION_PROXY_PASSWORD = 44

' Type of service to access.
Public Const INTERNET_SERVICE_FTP = 1
Public Const INTERNET_SERVICE_GOPHER = 2
Public Const INTERNET_SERVICE_HTTP = 3

' Opens an HTTP request handle.
Public Declare Function HttpOpenRequest Lib "wininet.dll" Alias "HttpOpenRequestA" _
(ByVal hHttpSession As Long, ByVal sVerb As String, ByVal sObjectName As String, ByVal sVersion As String, _
ByVal sReferer As String, ByVal something As Long, ByVal lFlags As Long, ByVal lContext As Long) As Long

' Brings the data across the wire even if it locally cached.
Public Const INTERNET_FLAG_RELOAD = &H80000000
Public Const INTERNET_FLAG_KEEP_CONNECTION = &H400000
Public Const INTERNET_FLAG_MULTIPART = &H200000

Public Const GENERIC_READ = &H80000000
Public Const GENERIC_WRITE = &H40000000

' Sends the specified request to the HTTP server.
Public Declare Function HttpSendRequest Lib "wininet.dll" Alias "HttpSendRequestA" (ByVal _
hHttpRequest As Long, ByVal sHeaders As String, ByVal lHeadersLength As Long, ByVal sOptional As _
String, ByVal lOptionalLength As Long) As Integer

' Queries for information about an HTTP request.
Public Declare Function HttpQueryInfo Lib "wininet.dll" Alias "HttpQueryInfoA" _
(ByVal hHttpRequest As Long, ByVal lInfoLevel As Long, ByRef sBuffer As Any, _
ByRef lBufferLength As Long, ByRef lIndex As Long) As Integer

' The possible values for the lInfoLevel parameter include:
Public Const HTTP_QUERY_CONTENT_TYPE = 1
Public Const HTTP_QUERY_CONTENT_LENGTH = 5
Public Const HTTP_QUERY_EXPIRES = 10
Public Const HTTP_QUERY_LAST_MODIFIED = 11
Public Const HTTP_QUERY_PRAGMA = 17
Public Const HTTP_QUERY_VERSION = 18
Public Const HTTP_QUERY_STATUS_CODE = 19
Public Const HTTP_QUERY_STATUS_TEXT = 20
Public Const HTTP_QUERY_RAW_HEADERS = 21
Public Const HTTP_QUERY_RAW_HEADERS_CRLF = 22
Public Const HTTP_QUERY_FORWARDED = 30
Public Const HTTP_QUERY_SERVER = 37
Public Const HTTP_QUERY_USER_AGENT = 39
Public Const HTTP_QUERY_SET_COOKIE = 43
Public Const HTTP_QUERY_REQUEST_METHOD = 45
Public Const HTTP_STATUS_DENIED = 401
Public Const HTTP_STATUS_PROXY_AUTH_REQ = 407

' Add this flag to the about flags to get request header.
Public Const HTTP_QUERY_FLAG_REQUEST_HEADERS = &H80000000
Public Const HTTP_QUERY_FLAG_NUMBER = &H20000000
' Reads data from a handle opened by the HttpOpenRequest function.
Public Declare Function InternetReadFile Lib "wininet.dll" _
(ByVal hFile As Long, ByVal sBuffer As String, ByVal lNumBytesToRead As Long, _
lNumberOfBytesRead As Long) As Integer

Public Declare Function InternetWriteFile Lib "wininet.dll" _
(ByVal hFile As Long, ByVal sBuffer As String, _
ByVal lNumberOfBytesToRead As Long, _
lNumberOfBytesRead As Long) As Integer

Public Declare Function FtpOpenFile Lib "wininet.dll" Alias _
"FtpOpenFileA" (ByVal hFtpSession As Long, _
ByVal sFileName As String, ByVal lAccess As Long, _
ByVal lFlags As Long, ByVal lContext As Long) As Long
Public Declare Function FtpDeleteFile Lib "wininet.dll" _
Alias "FtpDeleteFileA" (ByVal hFtpSession As Long, _
ByVal lpszFileName As String) As Boolean
Public Declare Function InternetSetOption Lib "wininet.dll" Alias "InternetSetOptionA" _
(ByVal hInternet As Long, ByVal lOption As Long, ByRef sBuffer As Any, ByVal lBufferLength As Long) As Integer
Public Declare Function InternetSetOptionStr Lib "wininet.dll" Alias "InternetSetOptionA" _
(ByVal hInternet As Long, ByVal lOption As Long, ByVal sBuffer As String, ByVal lBufferLength As Long) As Integer

' Closes a single Internet handle or a subtree of Internet handles.
Public Declare Function InternetCloseHandle Lib "wininet.dll" _
(ByVal hInet As Long) As Integer

' Queries an Internet option on the specified handle
Public Declare Function InternetQueryOption Lib "wininet.dll" Alias "InternetQueryOptionA" _
(ByVal hInternet As Long, ByVal lOption As Long, ByRef sBuffer As Any, ByRef lBufferLength As Long) As Integer

' Returns the version number of Wininet.dll.
Public Const INTERNET_OPTION_VERSION = 40

' Contains the version number of the DLL that contains the Windows Internet
' functions (Wininet.dll). This structure is used when passing the
' INTERNET_OPTION_VERSION flag to the InternetQueryOption function.
Public Type tWinInetDLLVersion
lMajorVersion As Long
lMinorVersion As Long
End Type

' Adds one or more HTTP request headers to the HTTP request handle.
Public Declare Function HttpAddRequestHeaders Lib "wininet.dll" Alias "HttpAddRequestHeadersA" _
(ByVal hHttpRequest As Long, ByVal sHeaders As String, ByVal lHeadersLength As Long, _
ByVal lModifiers As Long) As Integer

' Flags to modify the semantics of this function. Can be a combination of these values:

' Adds the header only if it does not already exist; otherwise, an error is returned.
Public Const HTTP_ADDREQ_FLAG_ADD_IF_NEW = &H10000000

' Adds the header if it does not exist. Used with REPLACE.
Public Const HTTP_ADDREQ_FLAG_ADD = &H20000000

' Replaces or removes a header. If the header value is empty and the header is found,
' it is removed. If not empty, the header value is replaced
Public Const HTTP_ADDREQ_FLAG_REPLACE = &H80000000

五、输入类代码,代码如下:

Option Explicit
Dim bActiveSession As Boolean
Dim hOpen As Long
Dim hConnection As Long
Dim scUserAgent As String
Dim strServer As String
Dim strUser As String
Dim strPassword As String
Dim nFlag As Long
Dim bRet As Boolean
Dim szFileLocal As String
Dim szFileRemote As String
Dim dwType As Integer

Public Function PUTFILE() As Boolean
On Error Resume Next
hOpen = InternetOpen(scUserAgent, INTERNET_OPEN_TYPE_DIRECT, vbNullString, vbNullString, 0)
hConnection = InternetConnect(hOpen, strServer, INTERNET_INVALID_PORT_NUMBER, strUser, strPassword, INTERNET_SERVICE_FTP, nFlag, 0)
bRet = FtpPutFile(hConnection, szFileLocal, szFileRemote, _
dwType, 0)
Call CloseConn
PUTFILE = bRet
End Function

Sub CloseConn()
If hConnection <> 0 Then InternetCloseHandle hConnection
hConnection = 0
End Sub

Function getRemoteName(filename)
Dim arrName() As String
arrName = Split(filename, ".")
Randomize
getRemoteName = Date & CInt(Rnd * 1000) & "." & arrName(UBound(arrName))
End Function

Private Sub Class_Initialize()
scUserAgent = "My FTP"
strServer = "www.XXX.cn"
strUser = "Username"
strPassword = "Password"
nFlag = INTERNET_FLAG_PASSIVE
szFileLocal = "DefultLocalFileName"
szFileRemote = "DefultRemoteFileName"
dwType = 1
End Sub

Public Property Get connServer() As Variant
connServer = strServer
End Property

Public Property Let connServer(ByVal vNewValue As Variant)
strServer = vNewValue
End Property

Public Property Get connUser() As Variant
connUser = strUser
End Property

Public Property Let connUser(ByVal vNewValue As Variant)
strUser = vNewValue
End Property

Public Property Get connPassword() As Variant
connPassword = strPassword
End Property

Public Property Let connPassword(ByVal vNewValue As Variant)
strPassword = vNewValue
End Property

Public Property Let LocalFileName(ByVal vNewValue As Variant)
szFileLocal = vNewValue
szFileRemote = getRemoteName(vNewValue)
End Property

Public Property Get RemoteFileName() As Variant
RemoteFileName = szFileRemote
End Property

六、生成DLL
七、使用VB6的打包工具打包成“Internet ActiveX 安装包”,这是,VB打包后,还会给一个例子的HTML文件
八、建立HTML文件
<HTML>
<HEAD>
<TITLE>FtpConn.CAB</TITLE>
</HEAD>
<BODY>
<OBJECT ID="clsPutFile"
CLASSID="CLSID:D9BACC8F-0A99-46DA-ADA3-F1C25A48AA78"
CODEBASE="FtpConn.CAB#version=1,0,0,0">
</OBJECT>
<INPUT type="file" name="FileName"><button onclick="go()">GO~!</button>
<SCRIPT LANGUAGE="JavaScript">
<!-- by Newrocky 2004-12-7 QQ:1936234
function go()

if (FileName.value!='')

clsPutFile.LocalFileName=FileName.value;
alert(clsPutFile.RemoteFileName);//查看远程文件名
if (clsPutFile.PutFile()) //开始传送文件,如果返回true则成功,反之失败

alert('上传文件成功!');

else

alert('上传文件失败!')


else

alert('请选择您要上传的文件');


//-->
</SCRIPT>
</BODY>
</HTML>

ok~!

===============下载部分=============
首先,声明一些变量
Dim strCommand As String

Dim strWebPage As String

为了动态设置Winsock控件的一些属性,在“开始”按钮的Click事件加入以下代码。

Winsock1.RemoteHost="192.168.100.101" '设置连接的IP地址

Winsock1.RemotePort = 80 '设置连接的远程端口号

Winsock1.Connect '开始连接远程计算机。

当Winsock控件连接操作完成,就可以传送FTP命令给服务器了,因此在Winsock控件的Connect事件中加入以下代码:

On Error Resume Next '在错误处理程序结束后,恢复原有的运行

strWebPage= " 192.168.100.101/main.htm" '设置要下载的文件'添加FTP中取得文件的命令(GET)

strCommand = "GET " + strWebPage + " HTTP/1.0" + vbCrLf

strCommand = strCommand + "Accept: */*" + vbCrLf

strCommand = strCommand + "Accept: text/html" + vbCrLf

strCommand = strCommand + vbCrLf '必须以vbCrLf结束命令

Winsock1.SendData strCommand '向远程计算机发送命令

当Winsock控件获取到数据时,需要对数据进行处理,本例中将获取的内容显示在文本框控件中,因此在Winsock控件的DataArrival事件加入以下代码:

On Error Resume Next '在错误处理程序结束后,恢复原有的运行

Dim webData As String

Winsock1.GetData webData,vbString '获取当前的数据块

Text1.Text = Text1.Text + webData '显示接收到的数据
参考技术A 一楼的是一种方法(没有详细看),但是好像太繁杂,有比较简单的。
您的Email?我给您一个。
参考技术B 汗,专家的答案MS还要借用FTP,这样太麻烦了吧。。 参考技术C 你要把Server程序放到公网服务器上?自己写的程序不安全的。别让黑客利用了。最好学是使用FTP软件。给自己添个账号就可以实现了。

以上是关于易语言 客户端如何判断与服务器掉线的主要内容,如果未能解决你的问题,请参考以下文章

易语言如何运行第三方软件上的按钮

易语言时间比较大小(先后)

易语言模拟浏览器发送数据到web服务器

易语言复制多个按钮

易语言串口调试怎么判断串口数据接收完成。最好有源码每次接收到的数据长度不一样。(无自定义规约)

易语言如何向CMD窗口发送命令?