java tcp envois de caractere sans buffer

java tcp envois de caractere sans buffer - Java - Programmation

Marsh Posté le 27-05-2010 à 17:19:53    

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

Reply

Marsh Posté le 27-05-2010 à 17:19:53   

Reply

Marsh Posté le 27-05-2010 à 22:58:21    

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!
Reply

Marsh Posté le 27-05-2010 à 23:09:38    

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

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed