我正在编写一个处理与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);
}
}
我确定,该消息将从应用程序发送到服务器。所以这不是我想的问题!
感谢您的帮助。