-
Да именно UDP. После приёма пустого пакета использую тот же сокет и отправляю на PC:
cln_adr.sin_family := SOCKET_AF_INET;
bytes_received := SysSockRecvFrom(sock, ADR(R2_BUF[0]), 36, 0, ADR(cln_adr), SIZEOF(cln_adr));
IF bytes_received > 0 THEN
S_BUF.SIZE := 0;
R2_BUF.SIZE := DINT_TO_UINT(bytes_received);
mbas_inPLC(S_BUF:= S_BUF, R2_BUF:=R2_BUF , DATA:= DATA, ERROR=> ERROR);
bytes_sent := SysSockSendTo(sock, ADR(S_BUF.BUFFER), S_BUF.SIZE, 0, ADR(cln_adr), SIZEOF(cln_adr));
.....
mbas_inPLC заглушка заполняющая S_BUF поскольку R2_BUF пуст.
Приходит пакет.
-
ну незнаю, это же не ТСР чтоб один и тот же сокет использовать, если Вы в плк создали клиента, он как сервер не должен работать
-
А как быть с ICMP_TEST_PING.pro с сайта овен. Там один сокет и для приёма и для передачи UDP. Или UdpOpenReceiveSocket в TcpUdpLib.lib где создается слушающий UDP сокет?
В принципе то проект рабочий по ethernet, и частично (только передача) по модему с GPRS. Ксати создал второй отдельный сокет для передачи. Та жа песня, но:
если с одним сокетом отправка происходила с одного порта (502), то с двумя сокетами, с порта 1 с последуюющим увеличением на 1. По моему это не есть хорошо.