// imports spécifiques à JavaMail
import javax.mail.*;
import javax.mail.internet.*;
//------------------------------------------------------------------------------------------
public class EchoServer
{
public static char c;
public static void main (String args [])
{
try
{
// Création d'un serveur sur le port 13267
ServerSocket server = new ServerSocket (13267);
// Attente de la connexion d'un client
System.out.println("debut chargement image");
while (true)
{
new NouvelleConnexion(server.accept ());
System.out.println ("Connexion sur le socket");
//---------------------------------------------------
//System.out.println ("Connexion sur le socket : " + socket);
//-------------------------------------------------------------------------------------------
class NouvelleConnexion implements Runnable
{
Thread t;
Socket sck;
// Récupération des flux d'entrés et de sortie
InputStream fluxEntree;
OutputStream fluxSortie;
NouvelleConnexion(Socket sck)
{
//t = new Thread(this, sck.getInetAdress().getHostName()+"/"+sck.getPort());
t=new Thread(this);
this.sck=sck;
// Récupération des flux d'entrés et de sortie
try
{
fluxEntree = sck.getInputStream ();
fluxSortie = sck.getOutputStream ();
}
catch (IOException e)
{
e.printStackTrace();
}
System.out.println ("Connexion sur le socket : " + this.sck);
t.start();
}
public void run()
{
try
{
EchoServer.c = (char)fluxEntree.read();
}
catch (IOException e)
{
e.printStackTrace();
}
if(EchoServer.c == 'c')
{
System.out.println ("démmarage de la capture");
// récupération d'un périphérique à partir de son nom
CaptureDeviceInfo captureDevice = CaptureDeviceManager.getDevice("vfw:Microsoft WDM Image Capture (Win32):0");
// récupération du MediaLocator lié au périphérique de capture
MediaLocator mediaLocator = captureDevice.getLocator();
try {
// récupération d'une datasource à partir d'un MediaLocator
DataSource ds = Manager.createDataSource(mediaLocator);
// connexion sur la DataSource
ds.connect();
// connexion d'un player sur la datasource
Player player = Manager.createPlayer(ds);
// préparation du player et du périphérique
player.realize();
// démarrage de la lecture
player.start();
//-----------------------------------------------------------------------------------------------
// attend 1 seconde
// Récupération des flux d'entrés et de sortie
// InputStream fluxEntree = socket.getInputStream ();
//OutputStream fluxSortie = socket.getOutputStream ();
//server.close ();
/* }
catch (IOException e)
{
System.out.println (e);
}*/
}//fin de if
}
//-------------------------------------------------------------------------------------------------------
public static void saveJPG(Image img, String s)
{
BufferedImage bi = new BufferedImage(img.getWidth(null), img.getHeight(null), BufferedImage.TYPE_INT_RGB);
Graphics2D g2 = bi.createGraphics();
g2.drawImage(img, null, null);
FileOutputStream out = null;
try
{
out = new FileOutputStream(s);
}
catch (java.io.FileNotFoundException io)
{
// création du fichier automatiquement si inexistant
}
try
{
// encodage de l'image
encoder.encode(bi);
out.close();
}
catch (java.io.IOException io)
{
System.out.println("IOException");
}
}
//----------------------------------------------------------------------------------------------------------
if (monitoring){
// on créé les PixelGrabber qui vont a partir des images remplir les
// tableau de pixels
Object img1;
PixelGrabber grab1 = new PixelGrabber(img1‚ 0‚ 0‚ 320‚ 240‚ pixels1‚ 0‚ 320);
Object img2;
PixelGrabber grab2 = new PixelGrabber(img2‚ 0‚ 0‚ 320‚ 240‚ pixels2‚ 0‚ 320);
try {
// on grabbe
grab1.grabPixels();
grab2.grabPixels();
}
catch (InterruptedException e) {
System.err.println(“impossible de grabber les pixels de l`image“);
return;
}
// on récupère la moyenne des 3 couleurs pour 2 images successives
getColors(pixels1‚ red1‚ green1‚ blue1‚ colors1);
getColors(pixels2‚ red2‚ green2‚ blue2‚ colors2);
public void getColors(int []pixels‚ int blue‚ int red‚ int green‚ int[] colors) {
blue red green = 0;
for (int i = 0 ; i < pixels.length ; i÷÷) {
c = new Color(pixels[i]);
blue = blue ÷ c.getBlue();
red = red ÷ c.getRed();
green = green ÷ c.getGreen();
}
blue = blue / imageSize;
red = red / imageSize;
green = green / imageSize;
colors[0] = red;
colors[1] = green;
colors[2] = blue;
}
if(imageChanged(colors1‚ colors2)) {
mailWarning = new MailSender(“matthieu.drony@supinfo.com“‚ “Intrusion detectée“);
smsWarning = new MailSender(“06xxxxxxxx@orange.fr“‚ “Intrusion detectée“);
try{
this.sleep(200);
}
catch(InterruptedException ie){
}
}
}
}
....
public boolean imageChanged(int[] colors1‚ int[] colors2){
for (int i = 0 ; i < 3 ; i÷÷) {
if ((colors2[i] > colors1[i]÷3) && (colors2[i] > colors1[i]-3) ){
return true;
}
}
return false;
}
//classe qui permet l'envoi de mails et de SMS
class MailSender {
//////////////////////// constructeur //////////////////////////////
public MailSender(String dest‚ String message) {
try {
// recupération des propriétés du système
Properties props = System.getProperties();
// définition du type de message et du serveur smtp pour l'envoi
props.put(“mail.smtp.host“‚ “ns0.ovh.net“);
// conversion du message au format Mime
Session session = Session.getInstance(props‚ null);
Message msg = new MimeMessage(session);
// auteur du message
msg.setFrom(new InternetAddress(“\“Administrateur\“ <matthieu.drony@free.fr>“));
// objet‚ en-tête‚ et contenu du message
msg.setSubject(“Intrusion !!!“);
msg.setText(“Bonjour‚ une intrusion a été détectée.\n\n“ ÷ message);
msg.setHeader(“X-Mailer“‚ “JavaVideoMonitoring“);
msg.setSentDate(new Date());