Last Updated or created 2024-08-22
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
}
}