Java einfaches client - /server-console-chat-Anwendung
Ich möchte erstellen Sie eine einfache server-client-Anwendung, aber ich denke, es ist etwas falsch mit den IO-Streams. Es gibt keine GUI, damit das chat-geschehen soll über die Konsole( Sie können öffnen 2 eclipse, um es zu testen oder was auch immer IDE Sie verwenden).
hier ist mein server code:
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
public class Server {
ServerSocket serverSocket;
Socket connection; //connection-to-client
ObjectOutputStream output;
ObjectInputStream input;
public void run() {
try {
serverSocket = new ServerSocket(6000, 100);
} catch (IOException e) {
System.err.println("Invalid port number");
}
while (true) {
try {
waitForConnection();
getIOStreams();
processConnection();
} finally {
closeConnection();
}
}
}
public void closeConnection() {
try {
input.close();
output.close();
connection.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public void waitForConnection() {
System.out.println("Server is ready to accept conenctions");
try {
connection = serverSocket.accept(); //code will stop here until a
//connection occurs
System.out.println("Conenction established with the client");
} catch (IOException e) {
e.printStackTrace();
}
}
public void getIOStreams() {
try {
output = new ObjectOutputStream(connection.getOutputStream());
output.flush(); //send header information to the client, which
//contains info required to create the input stream
//object
input = new ObjectInputStream(connection.getInputStream());
System.out.println("Server established I/O streams");
} catch (IOException e) {
e.printStackTrace();
}
}
public void processConnection() {
sendData("Connection established with the server");
String inputMessage = "";
new Runnable() {
Scanner sc = new Scanner(System.in);
public void run() {
while (true) {
sendData(sc.nextLine());
}
}
};
do {
try {
inputMessage = (String) input.readObject();
System.out.println(inputMessage);
} catch (ClassNotFoundException e) {
System.err.println("Object of an unknown type was recieved");
} catch (IOException e) {
//TODO Auto-generated catch block
e.printStackTrace();
}
} while (inputMessage.equals("QUIT"));
}
public void sendData(String s) {
try {
output.writeObject(s);
output.flush();
System.out.println("Server: " + s);
} catch (IOException e) {
System.err.println("Error writting the message");
}
}
}
und dies ist mein client-code
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;
public class Client {
ServerSocket serverSocket;
Socket clientSocket;
ObjectOutputStream output;
ObjectInputStream input;
String serverAddress = "127.0.0.1";
public void run() {
connect2Server();
getIOStreams();
processConnection();
closeConnection();
}
public void connect2Server() {
System.out.println("Trying to connect to the server");
try {
clientSocket = new Socket(serverAddress, 6000);
} catch (UnknownHostException e) {
System.err.println("Server unavailable");
System.exit(1);
} catch (IOException e) {
//TODO Auto-generated catch block
e.printStackTrace();
}
}
public void getIOStreams() {
try {
output = new ObjectOutputStream(clientSocket.getOutputStream());
output.flush();
input = new ObjectInputStream(clientSocket.getInputStream());
System.out.println("Client established I/O Stream");
} catch (IOException e) {
e.printStackTrace();
}
}
public void processConnection() {
sendData("Connection established with the client");
String inputMessage = "";
new Runnable() {
Scanner sc = new Scanner(System.in);
public void run() {
String outputMessage = "";
do {
outputMessage = sc.nextLine();
sendData("Client: " + outputMessage);
} while (outputMessage.equals("QUIT"));
}
};
while (true) {
try {
inputMessage = (String) input.readObject();
System.out.println(inputMessage);
} catch (ClassNotFoundException e) {
System.err.println("Object of an unknown type was recieved");
} catch (IOException e) {
e.printStackTrace();
System.exit(1);
}
}
}
public void sendData(String s) {
try {
output.writeObject(s);
output.flush();
System.out.println("Client: " + s);
} catch (IOException e) {
System.err.println("Error writting the message");
}
}
public void closeConnection() {
try {
output.close();
input.close();
clientSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
zum ausführen des server-oder client-schreiben Sie einfach im wesentlichen client/server.run();
bitte sagen Sie mir, was ist mein Fehler und wie man es beheben 🙂
Ich bin zu faul, um zu gehen durch Ihren code ... bitte angeben, welche Fehlermeldung du bekommst oder was Sie erwartet, zu bekommen
inputMessage = (String) input.readObject(); Ausnahme happends in dieser Zeile(das ist von der client-Klasse)...was ich erwarte ist einen scanner zu Lesen, was ich Schreibe in die Konsole und es erscheint auf der Konsole des Servers und Umgekehrt
inputMessage = (String) input.readObject(); Ausnahme happends in dieser Zeile(das ist von der client-Klasse)...was ich erwarte ist einen scanner zu Lesen, was ich Schreibe in die Konsole und es erscheint auf der Konsole des Servers und Umgekehrt
InformationsquelleAutor blenddd | 2011-10-11
Du musst angemeldet sein, um einen Kommentar abzugeben.
Mehrere Punkte:
1) falsche Bedingungen für das Ende der Eingabe-Schleife:
diese sollten negiert werden ("!").
2) Sie sollten beginnen, Sie
System.in
Lesen von threads:3) sollten Sie eine Pause hören Schleife auf server für einige Ausnahmen, wie
EOFException
was bedeutet, dass client unterbrochen wurde.Ich Tue, das ist wahrscheinlich, weil Sie versucht, um
catch (EOFException e)
Klausel nachcatch (IOException e)
one - letzteres umfasst die ehemaligen (alsEOFException
erstrecktIOException
). Weitere Allgemeine Ausnahmen gesetzt werden sollte, nach mehr spezifischen.ja, habe es ausprobiert und jetzt funktioniert es, aber soweit ich weiß, wenn EOFException extends IOException dann, wenn im Fang eine IOException EOFException sollte nicht geworfen werden;es war jedoch geworfen :/
das ist der Punkt, Sie hakten es aber
catch
Klausel nicht enthaltenbreak
- und auf diese Weise die Schleife würde immer weiter wenn Sie die Verbindung trennen-client.klar, danke Kumpel
InformationsquelleAutor yozh