Доброго времени суток. Нужна помощь в наладке сокетного приложения.
При получении сообщения от клиента (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




Ответить с цитированием
