logo.png

Interface graphique

Corba

Interface de pilotage

socket

Programmes de contrôle


Ctrl Camera2

Home Up


Contents



1 Introduction

Utilisation des sockets pour la communication client-serveur.


2 Client

La socket garde la connexion ouverte durant toute la session. Les sockets n'étant pas prévues à cet effet, il faut envoyer un \n pour envoyer effectivement les données.


2.1 Telnet

$ telnet hostName portNumber
...
Ctrl + ]
> quit
$


2.2 Python

La socket ouvre une nouvelle connexion à chaque requette. Elle transmet la réponse puis se ferme.

#!/usr/bin/python
import sys
import socket

class ClientSocket():
   
    def __init__(self, ServerHost, ServerPort):
              
        self.ServerHost = ServerHost
        self.ServerPort = ServerPort
        self.socket = None


    def SendAndRecv(self, message):
        response = "socket error"
        print "%s\t..." % message,

        try:
            self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            socket.setdefaulttimeout(1)
            self.socket.connect((self.ServerHost, self.ServerPort))
            self.socket.send(message + "\n")
            
            response = ""
            newResponse = self.socket.recv(8)    
            while (newResponse != ""):
                response = response + newResponse
                newResponse = self.socket.recv(8)
                
            # remove ending \n
            response = response[:-1]

        except socket.error, err:
            response = "%s" % (err)
    
        self.socket.close()
        return response


3 Serveur

La solution utilise des fils (au sens fork) plutôts que des fils d'execution (thread) bien que ceux-ci soit plus réactifs.

La solution retenue est d'ouvrir une nouvelle connexion à chaque requette et de fermer la sockette une fois la réponse transmise.

Rien n'a été fait pour gérer la concurrence entre les fils.

Home Up

This document is also available in PDF and PostScript format.



2016-02-15