从Android应用程序发送到java服务器时丢失字符串

时间:2014-06-14 11:57:26

标签: java android string connection send

我正在编写一个处理与Java服务器连接的Android应用程序。 我可以连接到服务器(我在我的控制台中看到它。我有一个savetylog)。 但是现在,如果我从应用程序向服务器发送消息,它将丢失到服务器的路上。我在服务器上看不到该消息。否则在另一方面。 有什么想法吗?

以下是GUI的代码:

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import javax.swing.ComboBoxModel;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.WindowConstants;
import javax.swing.SwingUtilities;


/**
* This code was edited or generated using CloudGarden's Jigloo
* SWT/Swing GUI Builder, which is free for non-commercial
* use. If Jigloo is being used commercially (ie, by a corporation,
* company or business for any purpose whatever) then you
* should purchase a license for each developer using Jigloo.
* Please visit www.cloudgarden.com for details.
* Use of Jigloo implies acceptance of these licensing terms.
* A COMMERCIAL LICENSE HAS NOT BEEN PURCHASED FOR
* THIS MACHINE, SO JIGLOO OR THIS CODE CANNOT BE USED
* LEGALLY FOR ANY CORPORATE OR COMMERCIAL PURPOSE.
*/
public class Server_Fenster_OBDII extends javax.swing.JFrame {
    private JButton BtnStart;
    private JLabel jL;
    private JButton jBtnBeenden;
    private JTextField jTFNachricht;
    private JTextArea jTAVerlauf;
    private JScrollPane jScrollPane02;
    private JScrollPane jScrollPane01;
    private JButton jBtnLoeschen;
    private JButton jBtnSenden;
    private JLabel jLNachricht;
    private JComboBox jCBBefehle;
    private JLabel jLSpinner;
    private JScrollPane scrollPane;
    private TCPServer mServer;


    /**
    * Auto-generated main method to display this JFrame
    */
    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                Server_Fenster_OBDII inst = new Server_Fenster_OBDII();
                inst.setLocationRelativeTo(null);
                inst.setVisible(true);
            }
        });
    }



    public Server_Fenster_OBDII() {
        super("Werkstattserver");
        initGUI();
    }

    private void initGUI() {

        try {
            setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
            getContentPane().setLayout(null);
            {
                BtnStart = new JButton();
                getContentPane().add(BtnStart);
                BtnStart.setText("Server starten");
                BtnStart.setBounds(0, 0, 776, 38);


                //Staten des Servers
                BtnStart.addActionListener(new ActionListener() {
                    public void actionPerformed(ActionEvent e) {
                        // Solange der Server offen ist, ist es nicht erlaubt, den Startbutton
                        //erneut zu klicken
                        BtnStart.setEnabled(false);

                        //Übergibt das Fenster bei Anfragen durch die Klasse TCPServer
                        mServer = new TCPServer(new TCPServer.OnMessageReceived() {

                            //Callback Methode zum Abrufen der Daten aus der Klasse
                            //TCPServer. Sie werden dem Nachrichtenverlauf üerbgeben
                            public void messageReceived(String message) {
                                jTAVerlauf.append("\n" + "Kunde: " + message);
                            }
                        });
                        mServer.start();

                    }
                });
            }
            {
                jL = new JLabel();
                getContentPane().add(jL);
                jL.setText("Nachrichtenverlauf:");
                jL.setBounds(0, 120, 521, 16);
            }
            {
                jLSpinner = new JLabel();
                getContentPane().add(jLSpinner);
                jLSpinner.setText("Wählen Sie einen Diagnosebefehl aus:");
                jLSpinner.setBounds(0, 70, 521, 21);
            }
            {
                ComboBoxModel jCBBefehleModel = 
                        new DefaultComboBoxModel(
                                new String[] { "Befhel auswählen", "Kühlwassertemperatur", "Gaspedalstellung" , "Geschwindigkeit", "Drehzahl"});
                jCBBefehle = new JComboBox();
                getContentPane().add(jCBBefehle);
                jCBBefehle.setModel(jCBBefehleModel);
                jCBBefehle.setBounds(0, 91, 776, 29);


                jCBBefehle.addActionListener(new ActionListener() {
                    public void actionPerformed(ActionEvent event) {
                        JComboBox comboBox = (JComboBox) event.getSource();
                        Object selected = comboBox.getSelectedItem();
                        if (selected == "Befhel auswählen"){
                            jTFNachricht.setText("");
                        } else if (selected == "Kühlwassertemperatur"){
                            jTFNachricht.setText("0105 SERVERBEFEHL");
                        } else if (selected == "Gaspedalstellung"){
                            jTFNachricht.setText("0111 SERVERBEFEHL");
                        } else if (selected == "Geschwindigkeit"){
                            jTFNachricht.setText("010D SERVERBEFEHL");
                        } else if (selected == "Drehzahl"){
                            jTFNachricht.setText("010C SERVERBEFEHL");
                        }
                    }
                });
            }
            {
                jLNachricht = new JLabel();
                getContentPane().add(jLNachricht);
                jLNachricht.setText("Geben Sie Ihre Nachricht ein:");
                jLNachricht.setBounds(0, 379, 771, 16);
            }
            {
                jBtnSenden = new JButton();
                getContentPane().add(jBtnSenden);
                jBtnSenden.setText("Senden");
                jBtnSenden.setBounds(0, 490, 776, 31);
                jBtnSenden.addKeyListener(new KeyAdapter() {
                });
                //Senden Button belegen
                jBtnSenden.addActionListener(new ActionListener() {
                    public void actionPerformed(ActionEvent e) {
                        //Lies die Nachricht aus dem Textview
                        String messageText = jTFNachricht.getText();
                        // Füge die Nachricht im Nachrichtenverlauf hinzu
                        jTAVerlauf.append("\n" + "Werkstatt: " + messageText);
                        // Sende die Nachricht an das Device
                        mServer.sendMessage(messageText);
                        // Lösche den Text aus dem Textfeld
                        jTFNachricht.setText("");
                    }
                });

            }
            {
                jBtnLoeschen = new JButton();
                getContentPane().add(jBtnLoeschen);
                jBtnLoeschen.setText("Verlauf löschen");
                jBtnLoeschen.setBounds(0, 337, 776, 31);
                jBtnLoeschen.addActionListener(new ActionListener() {

                    public void actionPerformed(ActionEvent arg0) {
                        jTAVerlauf.setText("");

                    }

                });
            }
            {
                jScrollPane01 = new JScrollPane();
                getContentPane().add(jScrollPane01);
                jScrollPane01.setBounds(0, 136, 778, 201);
                {
                    jTAVerlauf = new JTextArea();
                    jScrollPane01.setViewportView(jTAVerlauf);
                }
            }

            {
                jScrollPane02 = new JScrollPane();
                getContentPane().add(jScrollPane02);
                jScrollPane02.setBounds(0, 401, 776, 88);
                {
                    jTFNachricht = new JTextField();
                    jScrollPane02.setViewportView(jTFNachricht);
                    jTFNachricht.addKeyListener(new KeyAdapter() {
                        public void keyPressed(KeyEvent evt) {
                            jTFNachrichtKeyPressed(evt);
                        }
                    });
                }
            }
            {
                jBtnBeenden = new JButton();
                getContentPane().add(jBtnBeenden);
                jBtnBeenden.setText("Server beenden");
                jBtnBeenden.setBounds(0, 36, 776, 34);
                jBtnBeenden.addActionListener(new ActionListener() {
                    public void actionPerformed(ActionEvent e) {
                        System.exit(0);
                    }
                });
            }
            pack();
            this.setSize(792, 559);
        } catch (Exception e) {
            //add your error handling code here
            e.printStackTrace();
        }
    }

    private void jTFNachrichtKeyPressed(KeyEvent evt) {
        System.out.println("jTFNachricht.keyPressed, event="+evt);
        //TODO add your code for jTFNachricht.keyPressed
        if(evt.getKeyCode() == KeyEvent.VK_ENTER){
        jBtnSenden.doClick();
        jTFNachricht.setText("");
        }
    }

}

以下是连接的代码:

import javax.swing.*;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * Klasse enthält Thread zum parallelen ausführen von Sende-und Empfangvorgängen
 */
public class TCPServer extends Thread {

    //Port festlegen, an dem der Server lauscht/Variablen inizalisieren
    public static final int SERVERPORT = 8888;
    private boolean running = false;
    private PrintWriter mOut;
    private OnMessageReceived messageListener;

    public static void main(String[] args) {

        //Öffne das Panel aus der Klasse ServerBoard(Nachrichtenfenster)
        Server_Fenster_OBDII frame = new Server_Fenster_OBDII();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();
        frame.setVisible(true);

    }

    /**
     * Konstuktor der Klasse
     * @param messageListener wartet auf die Nachricht vom Client
     */
    public TCPServer(OnMessageReceived messageListener) {
        this.messageListener = messageListener;
    }

    /**
     * Methode, um die Nachricht an den Client zu senden
     * @param message the message sent by the server
     */
    public void sendMessage(String message){
        if (mOut != null && !mOut.checkError()) {
            mOut.println(message);
            //Sicherstellen, dass die Nachricht komplett übersendet wird
            //Vergleichbar mit Exceptions
            mOut.flush();
        }
    }

    @Override
    public void run() {
        super.run();

        running = true;

        try {
            System.out.println("Werkstattserver: Connecting...");

            //Öffne ein Server Socket. Ein Server Socket wartet auf Anfragen aus dem Netzwerk.
            ServerSocket serverSocket = new ServerSocket(SERVERPORT);

            //Öffne Client Socket. Die accept() Methode erlaubt den Zugriff auf den Port.
            Socket client = serverSocket.accept();
            System.out.println("Werkstattserver: Receiving...");

            try {

                //Sendet die Nachricht zum Client über Outputstream
                mOut = new PrintWriter(new BufferedWriter(new OutputStreamWriter(client.getOutputStream())), true);

                //Empfängt die Nachrichtem vom Client über InputStream
                BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));

                //Die Schleife wartet auf eingehende Nachrichten vom Client(Endloschleife)
                while (running) {
                    if(running = true){
                        System.out.println("Ich bin es und mir gehts gut");
                    }
                    String message = in.readLine();
                    if (message != null && messageListener != null) {
                        //Rufe die Methode messageReceived von der Klasse ServerBoard auf
                        messageListener.messageReceived(message);
                    }
                }

            } catch (Exception e) {
                System.out.println("Werkstattserver: Error");
                e.printStackTrace();
            } finally {
                client.close();
                System.out.println("Werkstattserver: Done.");
            }

        } catch (Exception e) {
            System.out.println("Werkstattserver: Error");
            e.printStackTrace();
        }

    }

    //Klasse ServerBoard aufrufen. (Kommunikation unter den Klassen)
    //Die Methode messageReveived muss beim Klicken auf startServer aufgerufen werden
    public interface OnMessageReceived {
        public void messageReceived(String message);
    }

}

我确定,该消息将从应用程序发送到服务器。所以这不是我想的问题!

感谢您的帮助。

0 个答案:

没有答案