Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
894 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  java tcp envois de caractere sans buffer

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

java tcp envois de caractere sans buffer

n°1996525
fth_inge
Posté le 27-05-2010 à 17:19:53  profilanswer
 

Bonjour, je voudrais savoir comment récupérer un caractère du clavier et l'envoyer par TCP sans passer par le buffer,
exemple: je tape sur le caractère "Z" , le caractere est directement envoyé par TCP, sans faire entrée ou autre
merci
c'est pour faire avancer un robot commander par wifi avec le module ezTCP 80c

mood
Publicité
Posté le 27-05-2010 à 17:19:53  profilanswer
 

n°1996620
Flaie
No it's necessary
Posté le 27-05-2010 à 22:58:21  profilanswer
 

Salut,
 
je ne crois pas qu'il y ai de moyen portable de lire la console caractère par caractère (peut-être Console (java6) mais pas testé), en revanche tu peux mettre au point un simple GUI avec un text field + un key event listener qui se charge d'envoyer ça sur un socket.
J'ai trouvé cet article qui parle de façons de faire via une console si c'est vraiment obligatoire : http://stackoverflow.com/questions [...] r-types-it
 
Voici un exemple, je te laisse le soin de gérer les exceptions correctement...

Code :
  1. import javax.swing.*;
  2. import java.awt.event.*;
  3. import java.awt.BorderLayout;
  4. import java.io.DataOutputStream;
  5. import java.io.IOException;
  6. import java.net.Socket;
  7. public class CharacterTcpClient extends JPanel implements KeyListener, ActionListener {
  8.     private static final long serialVersionUID = 3556354942861359706L;
  9.     private final JTextField typing;
  10.     private Socket clientSocket;
  11.     private DataOutputStream out;
  12.     public CharacterTcpClient() {
  13.         super(new BorderLayout());
  14.        
  15.         // a JTextField to listen for key typed, and to show what was typed
  16.         typing = new JTextField();
  17.         typing.setEditable(false);
  18.         typing.addKeyListener(this);
  19.         typing.setText("Press any key..." );
  20.         typing.setHorizontalAlignment(JTextField.CENTER);
  21.         add(typing, BorderLayout.PAGE_END);
  22.         typing.requestFocusInWindow();
  23.        
  24.         // socket stuff
  25.         try {
  26.             clientSocket = new Socket("localhost", 1234);
  27.             out = new DataOutputStream(clientSocket.getOutputStream());
  28.         } catch (Exception e) {
  29.             e.printStackTrace();
  30.         }
  31.     }
  32.     /** Key typed in the JTextField */
  33.     public void keyTyped(KeyEvent e) {
  34.         showTyped(e, "KEY TYPED: " );
  35.     }
  36.     public void keyPressed(KeyEvent e) {}
  37.     public void keyReleased(KeyEvent e) {}
  38.     public void actionPerformed(ActionEvent e) {
  39.         typing.requestFocusInWindow();
  40.     }
  41.     /** Show what was typed, and send it over TCP. */
  42.     protected void showTyped(KeyEvent e, String s) {
  43.         if (e.getID() != KeyEvent.KEY_TYPED) return;
  44.    
  45.         String typed = String.valueOf(e.getKeyChar());
  46.         typing.setText(typed);
  47.         try {
  48.             out.writeBytes(typed + "\n" );
  49.         } catch (IOException e1) {
  50.             e1.printStackTrace();
  51.         }
  52.     }
  53.     private static void runWindow() {
  54.         JFrame.setDefaultLookAndFeelDecorated(true);
  55.        
  56.         // Create frame
  57.         JFrame frame = new JFrame("Character TCP Client" );
  58.         frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  59.         // Create content
  60.         JComponent pane = new CharacterTcpClient();
  61.         pane.setOpaque(true);
  62.         frame.setContentPane(pane);
  63.         //Display
  64.         frame.pack();
  65.         frame.setVisible(true);
  66.     }
  67.     public static void main(String[] args) {
  68.         // run the window
  69.         javax.swing.SwingUtilities.invokeLater(new Runnable() {
  70.             public void run() {
  71.                 runWindow();
  72.             }
  73.         });
  74.     }
  75. }


 
Pour des tests tu peux aussi monter un simple serveur TCP en quelques lignes (là encore, la gestion des exceptions sera à ta charge) :

Code :
  1. import java.io.*;
  2. import java.net.*;
  3. class TcpServer {
  4.     public static void main(String argv[]) throws Exception {
  5.         ServerSocket serverSocket = new ServerSocket(1234);
  6.         System.out.println("Waiting for someone..." );
  7.         Socket client = serverSocket.accept();
  8.         System.out.println("Accepted client" );
  9.         BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));
  10.         String received = null;
  11.         while ((received = in.readLine()) != null) {
  12.             System.out.println("Received: " + received);
  13.         }
  14.         System.out.println("Client disconnected" );
  15.         client.close();
  16.     }
  17. }


 
Bonne chance pour la suite de ton programme... :hello:


---------------
Always wear a camera!
n°1996624
fth_inge
Posté le 27-05-2010 à 23:09:38  profilanswer
 

merci Flaie pour ton aide je vais essayer de l'arranger pour mon utlisation :hello:


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  java tcp envois de caractere sans buffer

 

Sujets relatifs
[JAVA]objectOutputStreamDébutant en Java j'y arrive même pas à ça :( :( :(
[JAVA][Resolu] Compression multi-volumes[JAVA]Sauveragrde donnees
[JAVA / WebService] Invocation d'un WebService en JAVAPourquoi écrire une application web en java ?
[Java] Problème de dessin dans jPanelEtudier les mécanismes de sécurité de Java
API Java - package gnu.io Erreur Java/lang sur Java4NDS
Plus de sujets relatifs à : java tcp envois de caractere sans buffer


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR