Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Hallo,
ich bin noch ein Java Anfänger und möchte ein Programm schreiben, dass Zahlen auf einem Server ausrechnet und zurück sendet.
Wenn ich meinen Client Code in der main Methode ausführe funktioniert die Berechnung, wenn ich jedoch meine Daten in der Methode connect() stehen habe, connected mein programm zum Server, aber die Berechnung funktioniert nicht.
Komme einfach nicht drauf was hier noch fehlt.
[Java] public void connect() {
Socket server = null;
try
{
server = new Socket();
InputStream in = server.getInputStream();
OutputStream out = server.getOutputStream();
out.write( 4 );
out.write( 9 );
int result = in.read();
System.out.println( result );
}
catch ( UnknownHostException e ) {
e.printStackTrace();
}
catch ( IOException e ) {
e.printStackTrace();
}
finally
{
if ( server != null )
try { server.close(); } catch ( IOException e ) { e.printStackTrace(); }
}
}
public static void main(String[] args) throws UnknownHostException, IOException {
new GUI().setVisible(true);
server = new Socket("localhost", 9998);
wobei, selbst wenn sie aufgerufen wird, ergibt sie wenig Sinn,
die lokale Variable server aus der main-Methode wird dort ja kaum verwendet,
stattdessen
> server = new Socket();
was weder als Server noch als Client irgendwie hilft?
Vielen Dank, hatte vergessen die Methode Connect aufzurufen.
Nun kann ich meine Werte an den Server senden und der berechnet sie auch, nur wenn ich jetzt die Daten wieder an den Client zurück sende kommt nichts an.
Irgendwas stimmt mit dem OutputStream vom Server, oder InputStream vom Client nicht.
Wenn da jemand vielleicht weiter weiß.
Coding GUI Client - ( die Methode connect() ist ganz unten)
Java:
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.print.PrinterException;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
import javax.swing.*;
/**
*
* @author Toni
*/
public class GUI extends JFrame {
private static final long serialVersionUID = 1L;
private JButton activateButton;
private JButton activateEditButton;
private JTable table; // wird bisher nicht benutzt
public static String path = "";
public static String fileName = "";
final JTextField jtf2, jtf3, jtf4, jtf5;
public JPanel kk;
Button funktion;
Color background = new Color(240, 220, 255);
public static double[] a = new double[4];
public static boolean zeichne = false;
public JButton jb1;
public static double[] ergebnis = new double[21];
public static double[] test = new double[4];
Coord cd = new Coord();
/*
* private int narray = Integer.parseInt(JOptionPane
* .showInputDialog("Größe der Matrix angeben")); private double[][] matrix
* = new double[narray][narray];
*/
public GUI() {
setTitle("Differentialgleichungssystem 1. Ordnung");
setLocation(50, 50);
setPreferredSize(new Dimension(700, 900));
setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent we) {
int arg = JOptionPane.showConfirmDialog(null,
"Möchten sie das Programm wirklich beenden?",
"Wirklich beenden?", JOptionPane.YES_NO_OPTION);
if (arg == 0) {
System.exit(0);
}
}
});
JMenuBar jmb = new JMenuBar();
JMenu jmd = new JMenu("Datei");
JMenuItem jmid2 = new JMenuItem("Drucken", new ImageIcon(
"images/print.gif"));
jmid2.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_P,
InputEvent.CTRL_MASK));
jmid2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
try {
table.print();
} catch (PrinterException ex) {
ex.getStackTrace();
}
}
});
JMenuItem jmid1 = new JMenuItem("Exit",
new ImageIcon("images/exit.gif"));
jmid1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
jmd.add(jmid2);
jmd.addSeparator();
jmd.add(jmid1);
jmb.add(jmd);
JMenu jmh = new JMenu("Hilfe");
JMenuItem jmih1 = new JMenuItem("Hilfe", new ImageIcon(
"images/help.gif"));
JMenuItem jmih2 = new JMenuItem("Informationen über das Projekt ",
new ImageIcon("images/info.png"));
jmh.add(jmih1);
jmh.add(jmih2);
jmb.add(jmh);
this.setJMenuBar(jmb);
// Fenster Layout
final JPanel centerPanel = new JPanel();
centerPanel.setLayout(new GridBagLayout());
add(centerPanel, BorderLayout.NORTH);
GridBagConstraints c = new GridBagConstraints();
setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent arg0) {
int arg = JOptionPane.showConfirmDialog(null,
"Wollen Sie wirkliche Beenden?", "Wirklich abbrechen?",
JOptionPane.YES_NO_OPTION);
if (arg == 0) {
dispose();
activateButton.setEnabled(true);
activateEditButton.setEnabled(true);
}
}
});
c.insets = new Insets(10, 10, 0, 10);
c.anchor = GridBagConstraints.WEST;
c.gridy = 3;
c.gridx = 0;
JLabel jl5 = new JLabel("Matrix:");
centerPanel.add(jl5, c);
c.anchor = GridBagConstraints.WEST;
c.gridy = 3;
c.gridx = 1;
jtf2 = new JTextField(5);
centerPanel.add(jtf2, c);
c.anchor = GridBagConstraints.WEST;
c.gridy = 3;
c.gridx = 2;
jtf3 = new JTextField(5);
centerPanel.add(jtf3, c);
c.anchor = GridBagConstraints.WEST;
c.gridy = 4;
c.gridx = 1;
jtf4 = new JTextField(5);
centerPanel.add(jtf4, c);
c.anchor = GridBagConstraints.WEST;
c.gridy = 4;
c.gridx = 2;
jtf5 = new JTextField(5);
centerPanel.add(jtf5, c);
c.anchor = GridBagConstraints.WEST;
c.gridy = 5;
c.gridx = 0;
JButton jb3 = new JButton("Berechnen");
jb3.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
try {
a[0] = (Double.parseDouble(jtf2.getText()));
a[1] = (Double.parseDouble(jtf3.getText()));
a[2] = (Double.parseDouble(jtf4.getText()));
a[3] = (Double.parseDouble(jtf5.getText()));
connect();
} catch (Exception ex) {
JOptionPane.showMessageDialog(centerPanel,
"Bitte Werte eingeben");
}
if (a[0] == a[3] && a[1] == a[2])
;
// ergebnis = Calc.werte();
else {
JOptionPane.showMessageDialog(centerPanel,
"Symmetrische Matrix eingeben");
}
}
});
centerPanel.add(jb3, c);
c.anchor = GridBagConstraints.WEST;
c.gridy = 5;
c.gridx = 1;
jb1 = new JButton("zeichnen");
jb1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
zeichne = true;
repaint();
}
});
centerPanel.add(jb1, c);
c.anchor = GridBagConstraints.WEST;
c.gridy = 5;
c.gridx = 3;
JButton jb4 = new JButton("Löschen");
jb4.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
jtf2.setText("");
jtf3.setText("");
jtf4.setText("");
jtf5.setText("");
cd.removeAll();
cd.repaint();
}
});
centerPanel.add(jb4, c);
c.anchor = GridBagConstraints.WEST;
c.gridwidth = 1;
c.gridy = 5;
c.gridx = 4;
JButton jb5 = new JButton("Beenden");
jb5.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
int arg = JOptionPane.showConfirmDialog(null,
"Wollen Sie wirklich Beenden?", "Beenden",
JOptionPane.YES_NO_OPTION);
if (arg == 0) {
dispose();
activateButton.setEnabled(true);
activateEditButton.setEnabled(true);
}
}
});
centerPanel.add(jb5, c);
c.anchor = GridBagConstraints.WEST;
c.gridy = 10;
c.gridx = 0;
c.gridwidth = GridBagConstraints.REMAINDER;
c.fill = GridBagConstraints.HORIZONTAL;
// JPanel für Koordinatensystem
kk = new JPanel();
kk.setPreferredSize(new Dimension(300, 250));
centerPanel.add(kk, c);
kk.add(cd);
add(cd, BorderLayout.WEST);
super.pack();
}
public void connect() {
Socket client = null;
try {
client = new Socket("localhost", 9998);
DataOutputStream out = new DataOutputStream(client.getOutputStream());
DataInputStream in = new DataInputStream(client.getInputStream());
out.writeDouble(a[0]);
out.writeDouble(a[1]);
out.writeDouble(a[2]);
out.writeDouble(a[3]);
out.close();
test[0] = in.readDouble();
test[1] = in.readDouble();
test[2] = (in.readDouble());
test[3] = (in.readDouble());
System.out.println("Test"+test[0]);
in.close();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (client != null)
try {
client.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
new GUI().setVisible(true);
}
Und hier noch mein Server - hier wird wohl ganz unten handleConnection() relevant sein
/**
*
* @author Toni
*/
public class Server extends JFrame {
private static final long serialVersionUID = 1L;
static int portnumber = 9998;
ServerSocket ss;
public static double[] b = new double[4];
public static double[] ergebnis = new double[21];
public void startServer() {
try {
ss = new ServerSocket(portnumber);
System.out.println(ss.getLocalSocketAddress().toString());
while (!ss.isClosed()) {
Socket client = ss.accept();
handleConnection(client);
public void handleConnection(Socket client) throws IOException {
DataInputStream in = new DataInputStream(client.getInputStream());
DataOutputStream out = new DataOutputStream(client.getOutputStream());
mit out.close() beim Client wäre ich vorsichtig,
kann ruhig offen bleiben bis alles fertig ist, flush() reicht,
aber wenn es funktioniert, dann vielleicht ok