Доброго времени суток. Нужна помощь в наладке сокетного приложения.
При получении сообщения от клиента (plc) к серверу (pc) получаю это сообщение и часть прошлого сообщения
Например, если отправляю "OK", а получаю "OKate,791212,1000,982"
Также вот мой клиент
Код:
CASE eState OF
CLIENT_STATE_CREATE:
hClientSocket := SysSockCreate(SOCKET_AF_INET, SOCKET_STREAM, SOCKET_IPPROTO_TCP);
IF hClientSocket <> SOCKET_INVALID THEN
eState := CLIENT_STATE_CONNECT;
ELSE
eState := CLIENT_STATE_CLOSE;
END_IF
CLIENT_STATE_CONNECT:
stClientSettings.sin_family := SOCKET_AF_INET;
stClientSettings.sin_port := wPort;
dwIPaddr := IP_DECODE(sIPv4);
stClientSettings.sin_addr := dwIPaddr;
SysSockConnect(hClientSocket, ADR(stClientSettings), SIZEOF(stClientSettings) );
eState := CLIENT_STATE_SENDING;
CLIENT_STATE_SENDING:
IF SCREEN = 7 THEN
IF check = 200 OR check = 1 THEN
sSendToServer := CONCAT('insert,',DWORD_TO_STRING(number_filter));
OLD_FILTER := number_filter;
IF sReadFromServer = 'Ok / Insert' OR sReadFromServer = 'Ok / Update' THEN
sSendToServer := CONCAT('update,',DWORD_TO_STRING(number_filter));
END_IF
sSendToServer := CONCAT(sSendToServer, ',');
sSendToServer := CONCAT(sSendToServer, INT_TO_STRING(count_filter));
sSendToServer := CONCAT(sSendToServer, ',');
sSendToServer := CONCAT(sSendToServer, INT_TO_STRING(succses_filter));
END_IF
ELSE
sSendToServer := 'OK';
END_IF
diSendBytes := SysSockSend(hClientSocket, ADR(sSendToServer), LEN(sSendToServer), c_diFlag);
IF diSendBytes <> SIZEOF(sSendToServer) THEN
eState := CLIENT_STATE_READ;
fbTon(IN := FALSE);
ELSE
fbTon(IN := TRUE, PT := tSendServer);
IF fbTon.Q THEN
eState := CLIENT_STATE_CLOSE;
fbTon(IN := FALSE);
END_IF
END_IF
CLIENT_STATE_READ:
diRecvBytes := SysSockRecv(hClientSocket, ADR(sReadFromServer), SIZEOF(sReadFromServer), c_diFlag);
FIND('Close', sReadFromServer);
IF IS_CC(sReadFromServer, 'Close') THEN
%QW8.1.9.0 := 1;
ELSE
%QW8.1.9.0 := 0;
END_IF
IF diRecvBytes = SIZEOF(sReadFromServer) THEN
eState := CLIENT_STATE_CLOSE;
fbTon(IN := FALSE);
ELSE
fbTon(IN := TRUE, PT := tRecvServer);
IF fbTon.Q THEN
eState := CLIENT_STATE_CLOSE;
fbTon(IN := FALSE);
END_IF
END_IF
CLIENT_STATE_CLOSE:
SysSockShutdown(hClientSocket, c_diHow);
fbTon(IN := TRUE, PT := tSockClose);
IF fbTon.Q THEN
SysSockClose(hClientSocket);
eState := CLIENT_STATE_CREATE;
fbTon(IN := FALSE);
END_IF
END_CASE