ich habe mit CoDeSys V3.5.1.4 einen Server programmiert mit folgendem Code:
Zu Beginn hatte ich bezüglich dem Funktionsaufruf um die Kommunikation aufzubauen folgenden Ansatz gewählt:
1. Funktionsaufruf SysSockCreate
2. Funktionsaufruf SysSockBind
3. Funktionsaufruf SysSockListen
4. Funktionsaufruf SysSockAccept
Daraufhin werden dann die Funktionen SysSockSend und SysSockRecv ausgeführt.
Obwohl ich einige Bytes sende, bekomme ich als Rückgabewert von SysSockSend 0 (d.h. der Socket wurde gracefully closed)
Zusätzlich bekomme ich als Rückgabewert von SysSockBind den Fehlercode 519 (The provided address is already in use)
Daraufhin habe ich den Funktionsaufruf SysSockSetOption vor die Funktion SysSockBind eingefügt. Der Fehler 519 bei SysSockBind ist damit weg, nur bekomme ich jetzt als Rückgabewert der Listen-Funktion ein "False"!
Der Rückgabewert von SysSockSend ist erneut 0 (d.h. der Socket wurde gracefully closed)
Weiß jemand, woran dies liegt?
Hier ist der Code dazu:
IF(ifirstRun=1)THEN
  udiSocket :=SysSockCreate(SOCKET_AF_INET, SOCKET_STREAM, SOCKET_IPPROTO_IP, pErrorCreate);
  pbyBufferRecv:=ADR(byBufferRecv);
  pbyBufferSend:=ADR(byBufferSend);
  dwArg :=1;
  udInetAdress :=SysSockInetAddr('127.0.0.1', ADR(inaddrVar));     Â
  SockAddrSend.sin_addr :=inaddrVar;
  SockAddrSend.sin_family :=SOCKET_AF_INET;  Â
  SockAddrSend.sin_port :=SysSockHtons(4555);
       pSockAddrSend:=ADR(SockAddrSend);
  Â
  iValue :=1;
  udSetOption :=SysSockSetOption(udiSocket, SOCKET_SOL, SOCKET_SO_REUSEADDR, ADR(iValue), SIZEOF(iValue));
  udBind :=SysSockBind(udiSocket, pSockAddrSend, SIZEOF(SockAddrSend));       Â
 Â
  diMaxConnect:=10;
  udlisten:=SysSockListen(udiSocket, diMaxConnect); Â
  udiNewSocket :=SysSockAccept(udiSocket,pSockAddrSend, pSockAddrSend, pErrorAccept);
 Â
  byBufferSend[1] :=0;
 Â
  ifirstrun :=0;END_IF Â
diRecv :=SysSockRecv(udiNewSocket,pbyBufferRecv, SIZEOF(byBufferRecv), diFlags, pErrorRecv);
 Â
byBufferSend[0] :=1; byBufferSend[1] :=byBufferSend[1] +1;
 Â
diSent :=SysSockSend(udiNewSocket, pbyBufferSend, SIZEOF(byBufferSend), diFlags , pErrorSend);Â
SkyRuwen hat geschrieben:
Hallo,
ich habe mit CoDeSys V3.5.1.4 einen Server programmiert mit folgendem Code:
Zu Beginn hatte ich bezüglich dem Funktionsaufruf um die Kommunikation aufzubauen folgenden Ansatz gewählt:
1. Funktionsaufruf SysSockCreate
2. Funktionsaufruf SysSockBind
3. Funktionsaufruf SysSockListen
4. Funktionsaufruf SysSockAccept
Daraufhin werden dann die Funktionen SysSockSend und SysSockRecv ausgeführt.
Obwohl ich einige Bytes sende, bekomme ich als Rückgabewert von SysSockSend 0 (d.h. der Socket wurde gracefully closed)
Zusätzlich bekomme ich als Rückgabewert von SysSockBind den Fehlercode 519 (The provided address is already in use)
Daraufhin habe ich den Funktionsaufruf SysSockSetOption vor die Funktion SysSockBind eingefügt. Der Fehler 519 bei SysSockBind ist damit weg, nur bekomme ich jetzt als Rückgabewert der Listen-Funktion ein "False"!
Der Rückgabewert von SysSockSend ist erneut 0 (d.h. der Socket wurde gracefully closed)
Weiß jemand, woran dies liegt?
Hier ist der Code dazu:
IF(ifirstRun=1)THEN
  udiSocket :=SysSockCreate(SOCKET_AF_INET, SOCKET_STREAM, SOCKET_IPPROTO_IP, pErrorCreate);
  pbyBufferRecv:=ADR(byBufferRecv);
  pbyBufferSend:=ADR(byBufferSend);
  dwArg :=1;
  udInetAdress :=SysSockInetAddr('127.0.0.1', ADR(inaddrVar));     Â
  SockAddrSend.sin_addr :=inaddrVar;
  SockAddrSend.sin_family :=SOCKET_AF_INET;  Â
  SockAddrSend.sin_port :=SysSockHtons(4555);
       pSockAddrSend:=ADR(SockAddrSend);
  Â
  iValue :=1;
  udSetOption :=SysSockSetOption(udiSocket, SOCKET_SOL, SOCKET_SO_REUSEADDR, ADR(iValue), SIZEOF(iValue));
  udBind :=SysSockBind(udiSocket, pSockAddrSend, SIZEOF(SockAddrSend));       Â
 Â
  diMaxConnect:=10;
  udlisten:=SysSockListen(udiSocket, diMaxConnect); Â
  udiNewSocket :=SysSockAccept(udiSocket,pSockAddrSend, pSockAddrSend, pErrorAccept);
 Â
  byBufferSend[1] :=0;
 Â
  ifirstrun :=0;END_IF Â
diRecv :=SysSockRecv(udiNewSocket,pbyBufferRecv, SIZEOF(byBufferRecv), diFlags, pErrorRecv);
 Â
byBufferSend[0] :=1; byBufferSend[1] :=byBufferSend[1] +1;
 Â
diSent :=SysSockSend(udiNewSocket, pbyBufferSend, SIZEOF(byBufferSend), diFlags , pErrorSend);
Vielen Dank im Voraus und besten Gruß,
SkyRuwen
Hi, ich arbeite an einem ähnlichen Projekt. Ich habe eine Raspberry, in der ich einen TCP-Server ausführen muss, wo ich Nachrichten von Clients durch Sockets erhalten werde. Ich kann es nicht richtig funktionieren lassen, hast du es geschafft, es richtig funktionieren zu lassen? Haben Sie mehr Informationen über den Server oder ein Beispielprojekt?
Vielen Dank
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Hallo,
ich habe mit CoDeSys V3.5.1.4 einen Server programmiert mit folgendem Code:
Zu Beginn hatte ich bezüglich dem Funktionsaufruf um die Kommunikation aufzubauen folgenden Ansatz gewählt:
1. Funktionsaufruf SysSockCreate
2. Funktionsaufruf SysSockBind
3. Funktionsaufruf SysSockListen
4. Funktionsaufruf SysSockAccept
Daraufhin werden dann die Funktionen SysSockSend und SysSockRecv ausgeführt.
Obwohl ich einige Bytes sende, bekomme ich als Rückgabewert von SysSockSend 0 (d.h. der Socket wurde gracefully closed)
Zusätzlich bekomme ich als Rückgabewert von SysSockBind den Fehlercode 519 (The provided address is already in use)
Daraufhin habe ich den Funktionsaufruf SysSockSetOption vor die Funktion SysSockBind eingefügt. Der Fehler 519 bei SysSockBind ist damit weg, nur bekomme ich jetzt als Rückgabewert der Listen-Funktion ein "False"!
Der Rückgabewert von SysSockSend ist erneut 0 (d.h. der Socket wurde gracefully closed)
Weiß jemand, woran dies liegt?
Hier ist der Code dazu:
Vielen Dank im Voraus und besten Gruß,
SkyRuwen
Related
Talk.ru: 1
Vielen Dank im Voraus und besten Gruß,
SkyRuwen
Hi, ich arbeite an einem ähnlichen Projekt. Ich habe eine Raspberry, in der ich einen TCP-Server ausführen muss, wo ich Nachrichten von Clients durch Sockets erhalten werde. Ich kann es nicht richtig funktionieren lassen, hast du es geschafft, es richtig funktionieren zu lassen? Haben Sie mehr Informationen über den Server oder ein Beispielprojekt?
Vielen Dank