0 votes

Programme de chat qui envoie des octets au lieu de chaînes de caractères

J'ai un programme de chat que j'ai fait il y a quelque temps pour un cours. J'essaie d'en modifier certaines parties, notamment en envoyant des octets au lieu de chaînes de caractères. Si quelqu'un peut me guider dans la bonne direction pour modifier ce programme afin d'envoyer des octets au lieu de chaînes de caractères, faites-le moi savoir.

import java.awt. * ;
import java.awt.event. * ;
import java.net. * ;
import java.io. * ;
import javax.swing. * ;
import java.applet. * ; //for sounds
import java.net. * ; //for sounds
public class ServerChat extends JPanel implements Runnable, ActionListener {

    protected ServerSocket serverSocket;
    protected Socket socket;
    protected BufferedReader reader;
    protected BufferedWriter writer;
    protected JTextField text;
    protected JButton send, exit;
    protected List list;
    protected java.applet.AudioClip clip;
    protected Image bic = new ImageIcon("smoothy_blue.jpg").getImage();

    public ServerChat() {

        setLayout(null);

        send = new JButton("Send");
        send.addActionListener(this);
        exit = new JButton("Exit");
        exit.addActionListener(this);
        text = new JTextField();
        list = new List();
        list.setBounds(10, 10, 300, 350);
        add(list);
        send.setBounds(320, 340, 100, 20);
        add(send);
        exit.setBounds(320, 365, 100, 20);
        add(exit);
        text.setBounds(10, 365, 300, 20);
        add(text);
        connect();

    }

    public void playSound() {

        try {
            //create the clip that will played later
            clip = java.applet.Applet.newAudioClip(
              new java.net.URL("file:blip.wav"));
            clip.play();
        }
        catch (Exception xx) {
            xx.printStackTrace();
        }
    }

    public void connect() {
        try {
            // create the sever socket
            serverSocket = new ServerSocket(100);

            //accept the socket connection
            socket = serverSocket.accept();

            reader = new BufferedReader(
              new InputStreamReader(socket.getInputStream()));

            writer = new BufferedWriter(
              new OutputStreamWriter(socket.getOutputStream()));

            writer.write("Hello");
            writer.newLine();
            writer.flush();
            // start the thread
            Thread thread = new Thread(this);
            thread.start();

        } catch (Exception e) {
            e.getMessage();
        }

    }

    public void run() {
        try {
            socket.setSoTimeout(1);
        } catch (Exception e) {}
        while (true) {
            try {
                list.addItem(reader.readLine());
            } catch (Exception h) {
                h.getMessage();
            }
        }

    }

    public void sendMessage() {
        try {
            writer.write(text.getText());
            writer.newLine();
            writer.flush();
            text.setText("");
        } catch (Exception m) {
            m.getMessage();
        }
    }

    public void actionPerformed(ActionEvent event) {
        Object obj = event.getSource();

        if (obj == exit) {
            System.exit(0);
        }
        if (obj == send) {
            sendMessage();
            playSound();

        }
    }

    public void paintComponent(Graphics g) {

        super.paintComponent(g);
        g.drawImage(bic, 0, 0, null);

    }
}

1voto

Catchwa Points 3144

Vous envoyez et recevez déjà des octets (c'est fondamental pour toute communication par socket), vous choisissez simplement d'utiliser un fichier InputStreamReader qui a le comportement suivant :

Un InputStreamReader est une passerelle de flux d'octets à des flux de caractères : Il lit les octets et les décode en caractères caractères en utilisant un jeu de caractères spécifié. Le jeu de caractères qu'il utilise peut être spécifié par son nom ou peut être donné explicitement, ou le jeu de caractères par défaut de la de la plate-forme peut être accepté.

( API )

C'est-à-dire que vos caractères sont automatiquement convertis en octets, qui sont ensuite envoyés par l'interface socket.

Si vous voulez envoyer des octets bruts, il faut envelopper votre fichier InputStream en quelque chose qui traite les octets bruts et ne fait pas de conversion octet à caractère, par exemple BufferedInputStream

(Rincer et répéter pour votre prise de sortie)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X