Что нового

Надежный ли это код приема данных?

Sαuron

Новичок
Сообщения
45
Репутация
1
Делая сервис с TCP наступил на все существующие грабли (до этого AutoIt не использовал в подобных целях) и пришел с такому коду, который успешно использую для приема xor'енных UTF8 данных на сервере и на клиенте. Весь код для быстрого восприятия прокомментирован:

Код:
$server_receive_timeout_timer = TimerInit()
$server_receive_dannie = ''															; Все байты
$server_receive_dannie_new = ''														; Порция байт
$server_receive_recv_start = 0														; Флаг приема

While TimerDiff($server_receive_timeout_timer) < 5000								; Тайм аут через 5 секунд попыток приема
	  $server_receive_dannie_new = TCPRecv($server_receive_socket, 128, 1)
	  If $server_receive_dannie_new = '' Then										; Если байты не поступили
			If $server_receive_recv_start = 1 Then									;... и прием уже идет
				  ExitLoop															;... конец приема
			EndIf
	  Else
			$server_receive_recv_start = 1											; Если байты поступили - прием начался
	  EndIf
	  $server_receive_dannie &= StringReplace($server_receive_dannie_new, '0x', '')	; Убрать "0x" от TCPRecv
WEnd
$server_receive_dannie = BinaryToString('0x' & $server_receive_dannie, 4)


Буду рад, если вы прокомментируете о ошибках, которые я могу не видеть или предложите свой вариант соответствующий требованиям:
1. В течении 5 сек ждать приема данных
2. Выходить из приема, если данные больше не поступают
3. Принимать любой объем данных
4. Надежно расшифровывать UTF8 данные, даже если код символа начинается в конце первой порции TCPRecv и продолжается в начале следующей.
 
Верх