本帖最后由 lamant 于 2014-7-5 11:48 编辑
回复 2# kk_lee69
楼上的大哥,看来我的表达不清楚。
按F5运行没出错。
贴上客户端吧。我想实现的是客户端电脑上的一个TXT文本"D:\AutoIt3\1.txt"被修改了,客户端发现并读取该TXT (D:\AutoIt3\1.txt) 的最后一行,传递给服务端。
我真是看了很多帮助文档,查了很多例子。就是不知道问题出在哪。#include <WinAPIFiles.au3>
#include <APIFilesConstants.au3>
#include <WinAPI.au3>
#include <MsgBoxConstants.au3>
Opt('TrayAutoPause', 0)
Global Const $sPath = "D:\AutoIt3"
Global $hObj[1]
$hObj[0] = _WinAPI_FindFirstChangeNotification($sPath, $FILE_NOTIFY_CHANGE_LAST_WRITE)
Local $tObj = DllStructCreate('ptr;ptr')
Local $pObj = DllStructGetPtr($tObj)
DllStructSetData($tObj, 1, $hObj[0])
TCPStartup()
;OnAutoItExitRegister("ex1")
Global $S_IP, $S_Port, $iSocket
$S_IP = IniRead("iP.ini", "服务器地址", "IP", "")
$S_Port = IniRead("iP.ini", "服务器地址", "Port", "")
$iSocket = TCPConnect($S_IP, $S_Port)
If $iSocket = -1 Then Exit
Local $ID, $sFileRead, $str1, $strl_1
$Str1 = 1
While 1
Sleep(100)
$ID = _WinAPI_WaitForMultipleObjects(1, $pObj, 0, 0)
Switch $ID
Case 0
$sFileRead = FileReadLine("D:\AutoIt3\1.txt",-1)
if $sFileRead <> $Str1 Then ;与上一次读取的最后一行比较,如果不一样就输出
MsgBox(0,"客户端提示",$sFileRead) ;程序运行正常,这个框框读取的值是正确的。
$str1 = $sFileRead
$str1_1 = StringToBinary($sFileRead, 4)
TCPSend($iSocket, $str1_1) ;发送读取到的最后一行文本到服务端,好像没有发送出去
EndIf
Case Else
ContinueLoop
EndSwitch
If Not _WinAPI_FindNextChangeNotification($hObj[0]) Then Exit
WEnd
Func ex1()
TCPCloseSocket($iSocket)
TCPShutdown()
EndFunc
|