1 | ; I am the client, start me after the server! |
---|
2 | |
---|
3 | #include <MsgBoxConstants.au3> |
---|
4 | #include <FileConstants.au3> |
---|
5 | |
---|
6 | Example() |
---|
7 | |
---|
8 | Func Example() |
---|
9 | TCPStartup() |
---|
10 | |
---|
11 | OnAutoItExitRegister("OnAutoItExit") |
---|
12 | |
---|
13 | Local $sIPAddress = "127.0.0.1" |
---|
14 | Local $iPort = 65432 |
---|
15 | |
---|
16 | Local $iSocket = TCPConnect($sIPAddress, $iPort) |
---|
17 | Local $iError = 0 |
---|
18 | |
---|
19 | If @error Then |
---|
20 | $iError = @error |
---|
21 | MsgBox(BitOR($MB_SYSTEMMODAL, $MB_ICONHAND), "", "Client:" & @CRLF & "Could not connect, Error code: " & $iError) |
---|
22 | Return False |
---|
23 | EndIf |
---|
24 | |
---|
25 | Local $hFile = 0 |
---|
26 | |
---|
27 | Local Const $i4KiB = 4096, $bEOF = Binary(@CRLF & "{EOF}"), $iEOFLen = BinaryLen($bEOF) |
---|
28 | |
---|
29 | Local $bData = "" |
---|
30 | |
---|
31 | Local $iDataLen = 0 |
---|
32 | |
---|
33 | Local $fEOFReached = False |
---|
34 | |
---|
35 | #region Added |
---|
36 | Local $bData2 = "" |
---|
37 | |
---|
38 | Local $aFilePath[3] = ["test1[2].txt", "test2[2].txt", "test3[2].txt"] |
---|
39 | |
---|
40 | For $i = 0 To UBound($aFilePath) -1 |
---|
41 | #endregion Added |
---|
42 | $hFile = FileOpen($aFilePath[$i], BitOR($FO_BINARY, $FO_OVERWRITE)) |
---|
43 | |
---|
44 | Do |
---|
45 | #region Added |
---|
46 | If $bData2 <> "" Then |
---|
47 | $bData = $bData2 |
---|
48 | $bData2 = "" |
---|
49 | Else |
---|
50 | #endregion Added |
---|
51 | $bData = TCPRecv($iSocket, $i4KiB, 1) |
---|
52 | |
---|
53 | If @error Then |
---|
54 | $iError = @error |
---|
55 | MsgBox(BitOR($MB_SYSTEMMODAL, $MB_ICONHAND), "", "Client:" & @CRLF & "Connection lost, Error code: " & $iError) |
---|
56 | Return False |
---|
57 | EndIf |
---|
58 | EndIf |
---|
59 | $iDataLen = BinaryLen($bData) |
---|
60 | |
---|
61 | If $iDataLen = 0 Then ContinueLoop |
---|
62 | |
---|
63 | If BinaryMid($bData, 1 + $iDataLen - $iEOFLen, $iEOFLen) = $bEOF Then |
---|
64 | $bData = BinaryMid($bData, 1, $iDataLen - $iEOFLen) |
---|
65 | |
---|
66 | $fEOFReached = True |
---|
67 | EndIf |
---|
68 | |
---|
69 | FileWrite($hFile, $bData) |
---|
70 | Until $fEOFReached |
---|
71 | |
---|
72 | FileClose($hFile) |
---|
73 | |
---|
74 | TCPSend($iSocket, @CRLF & "{EOFOK}") ; Tell the server the file is successfuly received. |
---|
75 | FileWriteLine("toto.txt", "[" & @MIN & ":" & @MSEC & "]client: send EOFOK") |
---|
76 | |
---|
77 | Do |
---|
78 | $bData2 = TCPRecv($iSocket, $i4KiB, 1) |
---|
79 | ; If an error occured - the server is not sending more files - display a message and return True |
---|
80 | If @error Then |
---|
81 | FileWriteLine("toto.txt", "[" & @MIN & ":" & @MSEC & "]client: error?") |
---|
82 | |
---|
83 | TCPCloseSocket($iSocket) |
---|
84 | MsgBox($MB_SYSTEMMODAL, "", "Client:" & @CRLF & "Files received.") |
---|
85 | Return True |
---|
86 | EndIf |
---|
87 | |
---|
88 | Sleep(10) ; Avoid high CPU usage. |
---|
89 | Until BinaryLen($bData2) > 0 |
---|
90 | |
---|
91 | ; Reset variables that needs to be reseted. |
---|
92 | $fEOFReached = False |
---|
93 | Next |
---|
94 | |
---|
95 | TCPCloseSocket($iSocket) |
---|
96 | EndFunc ;==>Example |
---|
97 | |
---|
98 | Func OnAutoItExit() |
---|
99 | TCPShutdown() |
---|
100 | EndFunc ;==>OnAutoItExit |
---|