Hallo Zusammen,
derzeit lerne ich mit Client-Server-Anwendungen umzugehen, da ich so etwas vorher noch nicht gemacht habe.
Zur Übung habe ich eine mini Anwendung programmiert. Allerdings funktioniert es zur Zeit nicht so ganz. Ich vermute, dass das Problem bei meinem Server liegt.
Bei meinem Programm schickt der Client eine Nachricht aus einem Textfeld(gui) an den Server. Der Server soll die Nachricht an ein anderen Textfeld senden. Es soll quasi ein Gruppenchat sein.
Die Client Seite funktioniert, aber mein Server macht nicht das, was er soll. Ich hoffe jemand kann mir helfen.
Vielen Dank im Voraus
Client
import [...]
public class SCSClient extends JFrame implements ActionListener {
//Server Attribute
InputStream is=null;
OutputStream os=null;
PrintWriter out;
Scanner in;
//Gui attribute
JButton buttonOK;
feld panel= new feld();
public SCSClient(String host,int port) throws UnknownHostException, IOException{
//GUI-Abschnitt
this.setTitle("Client");
this.setSize(500, 500);
this.setVisible(true);
BorderLayout bla= new BorderLayout();
this.setLayout(bla);
buttonOK = new JButton("OK");
buttonOK.addActionListener(this);
panel.add(buttonOK);
this.add(panel);
this.setVisible(true);
//Serververbindung
Socket server = new Socket(host,port);
this.is=server.getInputStream();
this.os=server.getOutputStream();
out = new PrintWriter(os,true);
in = new Scanner(is );
}
@Override
public void actionPerformed(ActionEvent es) {
if(es.getSource()==buttonOK){
System.out.println(panel.tfName.getText()); //Diese Zeile wurde zum testen erstellt
out.println("hallo"); //wir schicken unsere Nachricht an den Server
}
}
public static void main(String[] args) throws UnknownHostException, IOException {
SCSClient kunde = new SCSClient("localhost",6000);
}
}
Server
import[...]
public class SCSServer {
//Server-Attribute
Socket client=null;
InputStream is;
OutputStream os;
PrintWriter out;
Scanner in;
//Gui panel
feld panel=new feld();
public SCSServer(int port){
try {
ServerSocket server=new ServerSocket(port);
while(true){
client=server.accept();
this.handle(client);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private void handle(Socket client) {
try {
//Streams initialisieren
this.is=client.getInputStream();
this.os=client.getOutputStream();
out = new PrintWriter(os,true);
in = new Scanner(is );
//Das was der client in das gelbe Textfeld geschrieben hat, soll drunter geschrieben werden.
String antwort = in.nextLine(); //Eingabe wird zwischengespeichert
panel.antwort.setText(antwort);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String[] args){
new SCSServer(6000);
}
}
feld
public class feld extends JPanel {
JTextField tfName;
JTextField antwort;
public feld(){
this.setPreferredSize(new Dimension(500,300));
this.setBackground(Color.GRAY);
JLabel label = new JLabel("Ihre Nachricht");
this.add(label);
tfName= new JTextField(20); //Nachricht des einzelnen Clients
antwort= new JTextField(30); // Nachrichten aller Clients die der Server schickt
tfName.setBackground(Color.YELLOW);
this.add(tfName);
this.add(antwort);
}
}
derzeit lerne ich mit Client-Server-Anwendungen umzugehen, da ich so etwas vorher noch nicht gemacht habe.
Zur Übung habe ich eine mini Anwendung programmiert. Allerdings funktioniert es zur Zeit nicht so ganz. Ich vermute, dass das Problem bei meinem Server liegt.
Bei meinem Programm schickt der Client eine Nachricht aus einem Textfeld(gui) an den Server. Der Server soll die Nachricht an ein anderen Textfeld senden. Es soll quasi ein Gruppenchat sein.
Die Client Seite funktioniert, aber mein Server macht nicht das, was er soll. Ich hoffe jemand kann mir helfen.
Vielen Dank im Voraus
Client
import [...]
public class SCSClient extends JFrame implements ActionListener {
//Server Attribute
InputStream is=null;
OutputStream os=null;
PrintWriter out;
Scanner in;
//Gui attribute
JButton buttonOK;
feld panel= new feld();
public SCSClient(String host,int port) throws UnknownHostException, IOException{
//GUI-Abschnitt
this.setTitle("Client");
this.setSize(500, 500);
this.setVisible(true);
BorderLayout bla= new BorderLayout();
this.setLayout(bla);
buttonOK = new JButton("OK");
buttonOK.addActionListener(this);
panel.add(buttonOK);
this.add(panel);
this.setVisible(true);
//Serververbindung
Socket server = new Socket(host,port);
this.is=server.getInputStream();
this.os=server.getOutputStream();
out = new PrintWriter(os,true);
in = new Scanner(is );
}
@Override
public void actionPerformed(ActionEvent es) {
if(es.getSource()==buttonOK){
System.out.println(panel.tfName.getText()); //Diese Zeile wurde zum testen erstellt
out.println("hallo"); //wir schicken unsere Nachricht an den Server
}
}
public static void main(String[] args) throws UnknownHostException, IOException {
SCSClient kunde = new SCSClient("localhost",6000);
}
}
Server
import[...]
public class SCSServer {
//Server-Attribute
Socket client=null;
InputStream is;
OutputStream os;
PrintWriter out;
Scanner in;
//Gui panel
feld panel=new feld();
public SCSServer(int port){
try {
ServerSocket server=new ServerSocket(port);
while(true){
client=server.accept();
this.handle(client);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private void handle(Socket client) {
try {
//Streams initialisieren
this.is=client.getInputStream();
this.os=client.getOutputStream();
out = new PrintWriter(os,true);
in = new Scanner(is );
//Das was der client in das gelbe Textfeld geschrieben hat, soll drunter geschrieben werden.
String antwort = in.nextLine(); //Eingabe wird zwischengespeichert
panel.antwort.setText(antwort);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String[] args){
new SCSServer(6000);
}
}
feld
public class feld extends JPanel {
JTextField tfName;
JTextField antwort;
public feld(){
this.setPreferredSize(new Dimension(500,300));
this.setBackground(Color.GRAY);
JLabel label = new JLabel("Ihre Nachricht");
this.add(label);
tfName= new JTextField(20); //Nachricht des einzelnen Clients
antwort= new JTextField(30); // Nachrichten aller Clients die der Server schickt
tfName.setBackground(Color.YELLOW);
this.add(tfName);
this.add(antwort);
}
}