Socket connect to server, enter number and get reply test.
server.py
import socket import threading # Define the host and port HOST = '0.0.0.0' # Localhost (change as needed) PORT = 65432 # Port to listen on (non-privileged ports are > 1023) # Function to handle each client connection def handle_client(conn, addr): print(f"Connected by {addr}") # Send a thank you message to the client upon connection thank_you_message = "Thank you for connecting! Please enter a number:\n" conn.sendall(thank_you_message.encode('utf-8')) while True: try: data = conn.recv(1024) if not data: break # Decode the received data received_number = data.decode('utf-8').strip() print(f"Received from {addr}: {received_number}") # Try to convert the received data to an integer try: number = int(received_number) response = f"The double of {number} is {number * 2}\n" except ValueError: response = "Please enter a valid number.\n" # Send the response back to the client conn.sendall(response.encode('utf-8')) except ConnectionResetError: print(f"Connection with {addr} lost.") break conn.close() print(f"Connection with {addr} closed.") # Function to start the server and listen for connections def start_server(): # Create a socket object server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # Bind the socket to the host and port server.bind((HOST, PORT)) # Start listening with a maximum backlog of 5 connections server.listen(5) print(f"Server listening on {HOST}:{PORT}") while True: # Accept a new connection conn, addr = server.accept() # Create a new thread to handle the client connection client_thread = threading.Thread(target=handle_client, args=(conn, addr)) client_thread.start() # Run the server if __name__ == "__main__": start_server()
python-client.py
import socket # Define the server host and port HOST = 'IPNUMBERSERVER' # The server's hostname or IP address PORT = 65432 # The port used by the server def start_client(): # Create a socket object client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # Connect to the server client.connect((HOST, PORT)) # Receive and print the welcome message from the server welcome_message = client.recv(1024).decode('utf-8') print(welcome_message) while True: # Enter a number and send it to the server number = input("Enter a number (or type 'exit' to quit): ") if number.lower() == 'exit': print("Closing connection...") break client.sendall(number.encode('utf-8')) # Receive the response from the server and print it response = client.recv(1024).decode('utf-8') print(response) # Close the connection after the loop ends client.close() # Run the client if __name__ == "__main__": start_client()
arduino-client.ino
#include <ESP8266WiFi.h> // For ESP8266 //#include <WiFi.h> // For ESP32 // Replace with your network credentials const char* ssid = "your_SSID"; // Replace with your network SSID (name) const char* password = "your_PASSWORD"; // Replace with your network password // Define the server's IP address and port const char* host = "192.168.1.100"; // Replace with your server's IP address const int port = 65432; // Server port WiFiClient client; void setup() { Serial.begin(115200); delay(10); // Connect to WiFi Serial.println(); Serial.print("Connecting to "); Serial.println(ssid); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(1000); Serial.print("."); } Serial.println(); Serial.println("WiFi connected."); Serial.println("IP address: "); Serial.println(WiFi.localIP()); // Connect to the server Serial.print("Connecting to server at "); Serial.print(host); Serial.print(":"); Serial.println(port); if (client.connect(host, port)) { Serial.println("Connected to server!"); // Wait for the welcome message from the server while (client.available() == 0); // Read and print the welcome message while (client.available()) { char c = client.read(); Serial.print(c); } } else { Serial.println("Connection failed."); } } void loop() { // Check if connected to the server if (client.connected()) { // Check if there is any serial input from the user if (Serial.available() > 0) { String input = Serial.readStringUntil('\n'); input.trim(); if (input.equalsIgnoreCase("exit")) { Serial.println("Closing connection..."); client.stop(); // Disconnect from the server while (true); // Stop the loop } // Send the number to the server client.println(input); // Wait for the server's response while (client.available() == 0); // Read and print the server's response while (client.available()) { char c = client.read(); Serial.print(c); } } } else { Serial.println("Disconnected from server."); while (true); // Stop the loop } }