IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

Winsock en Java


Sujet :

Java

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 25
    Par défaut Winsock en Java
    Bonjour,

    j'aimerai savoir: comment utilise-t-on l'équivalent de Winsock (en VB) en Java? J'ai tenté d'utiliser des sockets sans succès voici le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    import java.net.*;
    import java.io.*;
     
    class LMSTelnet {
     
    	public static void main( String[] args ) {
    		int port = Integer.parseInt(args[1]);
    		ClientTelnet cltlnt= new ClientTelnet(args[0],port);
     
    	}
     
     
    }
     
    class ClientTelnet extends Thread{
     
    	protected Socket s;
    	protected BufferedReader in;
    	protected BufferedReader inKey;
    	protected PrintStream out;
     
    	public ClientTelnet(String host,int port){ //constructeur lance méthode "écoute serv" et "écoute clavier"
     
    		try{
    			s=new Socket(host,port);
    			in=new BufferedReader(new InputStreamReader(s.getInputStream()));
     
    		}catch(IOException e){
    			System.out.println("Prob Socket");
    			System.exit(1);
    		}
    		start();
    		KeyListener();
    		}
     
    	public void KeyListener(){ //lit le cliavier et l'envoi au serv
    		String ligne;
     
    		try{
    			inKey = new BufferedReader( new InputStreamReader( System.in ) );
    			out = new PrintStream( s.getOutputStream() );
     
    			while( !(ligne = inKey.readLine()).equals("xxxxxx") )
    				{
    				ligne = HexToString( ligne );
    				out.println( ligne );
    				}
    			System.exit(1);
    		} catch( IOException e ) {
    			System.out.println( "probleme d'entree/sortie" );
    		}
     
    	}
    	public static String HexToString(String hexa) {
     
    		// On vérifie la longeur de la chaine :
    		if (hexa.length() % 2 != 0) {
    			throw new RuntimeException("Taille incorrecte");
    		}
     
    		// Création du buffer de lecture :
    		StringBuffer buf = new StringBuffer();
     
    		// On parcours la chaine par bloc de 2 caractères :
    		for (int pos = 0; pos<hexa.length(); pos+=2) {
    			// On récupère la chaine courante :
    			String substring = hexa.substring(pos, pos+2);
    			// Que l'on convertit en int puis en char :
    			char c = (char) Integer.parseInt(substring, 16);
    			// Et on ajoute le char au buffer :
    			buf.append(c);
    			pos++;
     
    		}
     
    		return buf.toString();
    	}
    	public void run(){ //lit le coté serv et l'affiche
    		String ligne;
    		try{
    			while(true){
    				sleep(1000);
    				ligne=in.readLine();
    			if(ligne==null)break;
    				System.out.println(ligne);
    		}
    		}catch(Exception e){
    			System.out.println("connexion perdue");
    		}
    	}
     
    }
    je ne parviens pas à lire le serveur alors que le code suivant en VBA fonctionne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    Option Compare Database
    Option Explicit
    Dim winsock As New MSWinsockLib.winsock
     
    'Ce code est un code VBA acess pour un formulaire simple contenant 2 texte box : Texte1 et Text2
     
    Private Sub boutonConnect_Click()
     
     
    If winsock.State <> sckConnected Then
    winsock.RemoteHost = "192.168.0.1"
    winsock.RemotePort = 2111
    winsock.Connect
    Else
    MsgBox "Vous êtes déjà connecté"
    End If
    End Sub
    Private Sub winsock_DataArrival(ByVal bytesTotal As Long)
    Dim strData
    winsock.GetData strData, vbString
    Me.Text2.Text = strData
    End Sub
     
    Private Sub Envoyer_Click()
    Dim chaine_a_transmettre As String
     
     
     
        chaine_a_transmettre = convertion_hexa_vers_string(Me.Texte1)
    If Me.Texte1 <> "" Then
    If winsock.State = sckConnected Then
    winsock.SendData chaine_a_transmettre
    Else
    MsgBox "Non connecté au serveur"
    End If
    Else
    MsgBox "Veuillez tapez le nom!"
    End If
    End Sub
     
    Function convertion_hexa_vers_string(ByVal chaine As String) As String
       Dim a As Long
       Dim reponse As String
     
       For a = 1 To Len(chaine) Step 3
          reponse = reponse + Chr$(Val("&h" + Mid$(chaine, a, 2)))
       Next
       convertion_hexa_vers_string = reponse
    End Function

  2. #2
    Modérateur
    Avatar de nouknouk
    Homme Profil pro
    Inscrit en
    Décembre 2006
    Messages
    1 655
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 655
    Par défaut
    salut,

    Cette fonction s'attend à lire des lignes de texte terminées par un retour chariot (donc un caractère '\n'). La fonction ne retournera donc un String que lorsqu'elle aura reçu ce fameux retour chariot.

    Ca ne semble pas être le cas de ton code VB qui semble retourner les octets qu'il vient de recevoir dans le paquet TCP, sans distinction du contenu des octets.

    Si au contraire tu cherches à récupérer des caractères dans un flux in-interrompu, utilise plutôt un truc dans ce style:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    int character;
    while( (character = in.read()) != -1){
    	System.out.print((char)character);
    }
    De plus, si tu t'attends à lire du texte octet par octet, il serait plus pertinent d'utiliser un ByteArrayInputStream ou de définir le bon charset de ton InputStreamReader (en "ISO-8859-1", donc), car le charset par défaut de java est l'UTF-16 si je me souviens bien.

    EDIT: autant pour moi: le charset utilisé par défaut dépend du système d'exploitation et du charset configuré, cf la javadoc.
    The default charset is determined during virtual-machine startup and typically depends upon the locale and charset of the underlying operating system.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 25
    Par défaut
    Un grand merci tu as vu juste

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. le Java est la continuité du C++ ???
    Par Vincent PETIT dans le forum Débats sur le développement - Le Best Of
    Réponses: 33
    Dernier message: 25/08/2005, 20h17
  2. directx et java?? possible??
    Par jiraiya dans le forum DirectX
    Réponses: 3
    Dernier message: 09/07/2002, 19h55
  3. webcam : lire sur un port usb en c/c++ ou java. sous win. ?
    Par flo007 dans le forum Choisir un environnement de développement
    Réponses: 2
    Dernier message: 24/05/2002, 23h24
  4. [Kylix] equivalent winsock avec kylix
    Par Victor dans le forum EDI
    Réponses: 2
    Dernier message: 08/05/2002, 07h43
  5. Service de nommage java C++
    Par Anonymous dans le forum CORBA
    Réponses: 3
    Dernier message: 15/04/2002, 12h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo