J'ai besoin de créer un serveur simple qui écoute les connexions TCP. S'il reçoit du texte on<EOF>
ou off<EOF>
puis il renvoie (echo) success
. La partie de réception fonctionne, mais maintenant j'en ai besoin pour renvoyer success
.
Code:
# import threading
import SocketServer
class TCPHandler(SocketServer.BaseRequestHandler):
def handle(self):
self.msg = self.request.recv(1024).strip()
if self.msg == "on<EOF>":
print "Turning On..."
#ECHO "SUCCESS<EOF>" <----- I need the server to echo back "success"
if self.msg == "off<EOF>":
print "Turning Off..."
#ECHO "SUCCESS<EOF>" <----- I need the server to echo back "success"
if __name__ == "__main__":
Host, port = '192.168.1.100', 1100
# Create server, bind to local Host and port
server = SocketServer.TCPServer((Host,port),TCPHandler)
print "server is starting on ", Host, port
# start server
server.serve_forever()
Eh bien je l'ai fait un jour avant de suivre un très bon tutoriel, je ne trouve pas le lien mais voici le code
import socket
Host = socket.gethostname()
port = 12345 # The same port as used by the server
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((Host, port))
s.sendall(b'Hello, world')
data = s.recv(1024)
s.close()
print('Received', repr(data))
Pour serveur
import socket
Host = '' # Symbolic name meaning all available interfaces
port = 12345 # Arbitrary non-privileged port
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((Host, port))
print Host , port
s.listen(1)
conn, addr = s.accept()
print('Connected by', addr)
while True:
try:
data = conn.recv(1024)
if not data: break
print "Client Says: "+data
conn.sendall("Server Says:hi")
except socket.error:
print "Error Occured."
break
conn.close()
Une meilleure approche de la python 3 docs serait:
Serveur
import socketserver
class MyTCPHandler(socketserver.BaseRequestHandler):
"""
The request handler class for our server.
It is instantiated once per connection to the server, and must
override the handle() method to implement communication to the
client.
"""
def handle(self):
# self.request is the TCP socket connected to the client
self.data = self.request.recv(1024).strip()
print("{} wrote:".format(self.client_address[0]))
print(self.data)
# just send back the same data, but upper-cased
self.request.sendall(self.data.upper())
if __name__ == "__main__":
Host, PORT = "localhost", 9999
# Create the server, binding to localhost on port 9999
server = socketserver.TCPServer((Host, PORT), MyTCPHandler)
# Activate the server; this will keep running until you
# interrupt the program with Ctrl-C
server.serve_forever()
Client
import socket
import sys
Host, PORT = "localhost", 9999
data = " ".join(sys.argv[1:])
# Create a socket (SOCK_STREAM means a TCP socket)
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock:
# Connect to server and send data
sock.connect((Host, PORT))
sock.sendall(bytes(data + "\n", "utf-8"))
# Receive data from the server and shut down
received = str(sock.recv(1024), "utf-8")
print("Sent: {}".format(data))
print("Received: {}".format(received))
J'espère que cela aide. Arturo
Si vous avez besoin d'une connexion serveur sans fin/continue, vous pouvez utiliser le code serveur suivant.
import socket # Import socket module
port = 50000 # Reserve a port for your service every new transfer wants a new port or you must wait.
s = socket.socket() # Create a socket object
Host = "" # Get local machine name
s.bind(('localhost', port)) # Bind to the port
s.listen(5) # Now wait for client connection.
print('Server listening....')
x = 0
while True:
conn, address = s.accept() # Establish connection with client.
while True:
try:
print('Got connection from', address)
data = conn.recv(1024)
print('Server received', data)
st = 'Thank you for connecting'
byt = st.encode()
conn.send(byt)
x += 1
except Exception as e:
print(e)
break
conn.close()
import socket # Import socket module
import os
import re
s = socket.socket() # Create a socket object
port = 50000 # Reserve a port for your service every new transfer wants a new port or you must wait.
s.connect(('localhost', port))
x = 0
st = str(x)
byt = st.encode()
s.send(byt)
# send message for hundred times
while x<100:
st = str(x)
byt = st.encode()
s.send(byt)
print(x)
while True:
data = s.recv(1024)
if data:
print(data)
x += 1
break
else:
print('no data received')
print('closing')
s.close()