PDA

Просмотр полной версии : СПК207 SysSocketAccept



приборист
26.12.2017, 17:21
Добрый день!
Пытаюсь запустить TCP Server.
SysSockAccept постоянно равен 16#FFFFFFFF.
При этом подключение к IP СПК - происходит.
Проверял через Hercules и через клиента на Control Win.
Не могу понять в чем причина.

Архив проекта во вложении.

Код:
CASE step OF //Настройки
0:
stop:=FALSE;

hSocket:=SysSockCreate(SOCKET_AF_INET, SOCKET_STREAM, SOCKET_IPPROTO_TCP, ADR(result));
sa.sin_family:=SOCKET_AF_INET;
sa.sin_addr.ulAddr:=SOCKET_INADDR_ANY;
sa.sin_port:=SysSockHtons(port);
result:=SysSockIoctl(hSocket, SOCKET_FIONBIO, ADR(mode));
result:=SysSockBind(hSocket, ADR(sa), SIZEOF(sa));
result:=SysSockListen(hSocket, maxCli);
tries:=0;
step:=1;

//Коннект к серверу
1:
tries:=tries+1;
hClientSocket:=SysSockAccept(hSocket, ADR(sa), SIZEOF(sa), ADR(result));
IF hClientSocket<>16#FFFFFFFF THEN
step:=3;
tries:=0;
okConn:=okConn+1;
END_IF

IF tries > 100 THEN //Ошибка, нет связи
step:=4;
tries:=0;
END_IF

//Отправляем данные
2:
tries:=tries+1;
nbSend:= SysSockSend (hClientSocket, ADR(strSend), LEN(strSend), 0, ADR(result));
IF nbSend<>0 THEN
step:=3;
tries:=0;
END_IF
IF tries > 100 THEN //Ошибка, нет связи
step:=4;
tries:=0;
END_IF

//Ждем и разбираем ответ
3:
tries:=tries+1;
strRecv:='';
nbRecv:= SysSockRecv (hClientSocket, ADR(strRecv), 1024,0, ADR(result));
IF nbRecv<>0 THEN
ok:=ok+1;
tries:=0;
END_IF

IF tries > 10 THEN
step:=4;
tries:=0;
END_IF

4:
SysSockClose (hClientSocket);
IF stop THEN
step:=5;
ELSE
step:=1;
END_IF


5:
SysSockClose (hSocket);
step:=0;

END_CASE

приборист
10.01.2018, 10:11
Вариантов нет?

Евгений Кислов
10.01.2018, 11:36
Навскидку


SysSockAccept(hSocket, ADR(sa), SIZEOF(sa), ADR(result));

На вход функции должен подаваться не размер, а указатель на размер.

Посмотрите это видео:
https://www.youtube.com/watch?v=ThVLXygHnnU&t=22s

И начните с построчного копипаста кода из него.

Или есть другой вариант - высокоуровневая CAA Net Base Services, где TCP-сервер создается с помощью пары ФБ.
В версии 3.5.4.0 в состав библиотеки входит pdf с описанием и примерами (в более поздних версиях библиотеки его потеряли).

приборист
10.01.2018, 15:41
Навскидку



На вход функции должен подаваться не размер, а указатель на размер.

Спасибо, проглядел - сейчас все заработало.



Или есть другой вариант - высокоуровневая CAA Net Base Services, где TCP-сервер создается с помощью пары ФБ.
В версии 3.5.4.0 в состав библиотеки входит pdf с описанием и примерами (в более поздних версиях библиотеки его потеряли).


Спасибо, поищу.