WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Off-by-one Problem mit dem TCP/IP-Client-Empfangsblock

 

_M4GI3R_
Forum-Newbie

Forum-Newbie


Beiträge: 1
Anmeldedatum: 16.10.23
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.10.2023, 16:37     Titel: Off-by-one Problem mit dem TCP/IP-Client-Empfangsblock
  Antworten mit Zitat      
Wenn ich den ersten Wert von meinem Py-Server an den Simulink TCP/IP-Client-Empfangsblock (nicht blockierender Modus) sende, passiert nichts und die Daten- und Statusausgänge bleiben beide 0. Wenn ich den zweiten Wert sende, wird der erste Wert empfangen. Wenn ich den dritten sende, wird der zweite empfangen. Und so weiter.
Ich habe keine Ahnung, warum das passiert. Weiß jemand, wie man das beheben kann, oder muss ich um dieses Phänomen herumumarbeiten?

Code:
%
import socket
import struct


def start_tcp_server_v3():
    # Initialize socket
    server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    server_socket.settimeout(100)  # Set timeout to 100 seconds as specified in Simulink

    # Bind the socket
    host, port = 'localhost', 50000
    server_socket.bind((host, port))

    while True:
        try:
            # Listen for incoming connections
            server_socket.listen(1)
            print("Server is listening...")

            # Establish connection
            client_socket, client_address = server_socket.accept()
            print(f"Connection established with {client_address}")

            # Reset the timeout for the client socket
            client_socket.settimeout(None)

            while True:
                try:
                    # Get user input for the data to send
                    user_input = input("Please enter a double value to send: ")
                    try:
                        double_value = float(user_input)
                    except ValueError:
                        print("Invalid input. Please enter a valid double value.")
                        continue

                    # Prepare data
                    data = struct.pack('>d', double_value)  # Big-endian byte order, type double

                    # Send data
                    client_socket.sendall(data)
                    print("Just sent: [ "+str(double_value)+" ]")
                   

                except (BrokenPipeError, ConnectionResetError, ConnectionAbortedError):
                    print("Client disconnected. Returning to listening mode.")
                    client_socket.close()  # Close the client socket
                    break  # Break the inner loop to go back to listening for new connections

        except socket.timeout:
            print("Server timeout. No client connected.")
            continue

        except KeyboardInterrupt:
            print("Server is shutting down.")
            break

        finally:
            # Close client socket if it exists
            if 'client_socket' in locals():
                client_socket.close()

    # Close the server socket
    server_socket.close()
    print("Server has been closed.")

# -----------------------------------------

start_tcp_server_v3()
 


Screenshot 2023-10-16 162709.png
 Beschreibung:
[Der If-Block und der Datenspeicher dienen der Handhabung des nicht blockierenden Modus]

Download
 Dateiname:  Screenshot 2023-10-16 162709.png
 Dateigröße:  108.11 KB
 Heruntergeladen:  84 mal
Private Nachricht senden Benutzer-Profile anzeigen


Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.