Задача чтобы после отправки клиентом сообщения, сервер слал обратно то же самое сообщение чтобы 100% удостовериться что он сообщение получил, если клиент обратно ничего не получит или получит не то сообщение то значит возникла какая то проблема и нужно выходить с ошибкой
Так же при отправке сообщения сначала шлеться размен сообщения, а потом само сообщение, чтобы отделить сообщения друг от друга
В итоге как я понимаю должен получиться идеальный клиент сервер, которому не страшны любые обрывы связи, клиент или 100% будет понимать что его сообщение дошло, либо будет выполнять какие то действия при ошибке
Написал все сам прошу оценить и может чего посоветовать
Клиент
Сервер
Так же при отправке сообщения сначала шлеться размен сообщения, а потом само сообщение, чтобы отделить сообщения друг от друга
В итоге как я понимаю должен получиться идеальный клиент сервер, которому не страшны любые обрывы связи, клиент или 100% будет понимать что его сообщение дошло, либо будет выполнять какие то действия при ошибке
Написал все сам прошу оценить и может чего посоветовать
Клиент
Код:
TCPStartup()
$iSocket = TCPConnect("127.0.0.1", 65432)
$n = 1
$sData=1
While 1
TCPsend_main($iSocket, $sData)
Sleep(1000)
$n = $n + 1
$sData = "kk"&$n
WEnd
Func TCPsend_main($iSocket, $data)
$size = BinaryLen($data)
$data = StringToBinary($data, 4)
$size = StringToBinary($size, 4)
TCPSend_s_podtverzdeniem($iSocket, $size, 4)
TCPSend_s_podtverzdeniem($iSocket, $data, $size)
EndFunc
Func TCPSend_s_podtverzdeniem($iSocket, $sData, $size)
TCPSend($iSocket, $sData)
While 1
$data = TCPRecv($iSocket, $size, 1)
$data = BinaryToString($data, 4)
ConsoleWrite("Подтверждение=" & $data & @CRLF)
If $data <> "" Then
If $data = $sData Then
ExitLoop
EndIf
EndIf
Sleep(100)
WEnd
EndFunc
Сервер
Код:
Local $hGUI = GUICreate("111", 310, 310)
$iEdit = GUICtrlCreateEdit("", 5, 5, 300, 300)
GUISetState(@SW_SHOW, $hGUI)
TCPStartup()
Local $iListenSocket = TCPListen("127.0.0.1", 65432, 100)
Do
$iSocket = TCPAccept($iListenSocket)
Until $iSocket <> -1 ;if different from -1 a client is connected.
While 1
TCPRecv_main($iSocket, $iEdit)
Sleep(100)
WEnd
Func TCPRecv_main($iSocket, $iEdit)
$size = TCPRecv_s_podtverzdeniem($iSocket, 4, $iEdit)
If $size > 0 Then
$data = TCPRecv_s_podtverzdeniem($iSocket, $size, $iEdit)
GUICtrlSetData($iEdit, GUICtrlRead($iEdit) & @CRLF & "Получено=" & $data)
Return $data
EndIf
EndFunc
Func TCPRecv_s_podtverzdeniem($iSocket, $size, $iEdit)
While 1
$data = TCPRecv($iSocket, $size, 1)
$data = BinaryToString($data, 4)
If $data <> "" Then
TCPSend($iSocket, $data)
ExitLoop
EndIf
WEnd
Return $data
EndFunc