den nächsten Fall Stellen Sie sich vor:Gewusst wie: Java Server-Socket Antwort und Client-Lese
-Client - Server-Verbindung
-Client eine Anfrage an den Server-Server sendet antwortet der Client- -Client liest die Antwort
Klasse Kunde:
public class Client extends Service{
private String IP_ADDRESS;
private int PORT;
public void start(){
l.info("Starting client for server at: "+IP_ADDRESS+":"+PORT);
//Initialization of the client
try {
cs=new Socket(IP_ADDRESS,PORT);
} catch (UnknownHostException e) {
l.error("Unkown host at the specified address");
e.printStackTrace();
} catch (IOException e) {
l.error("I/O error starting the client socket");
e.printStackTrace();
}
}
//Sends the specified text by param
public void sendText(String text){
//Initializa the output client with the client socket data
try {
//DataOutputStream to send data to the server
toServer=new DataOutputStream(cs.getOutputStream());
l.info("Sending message to the server");
PrintWriter writer= new PrintWriter(toServer);
writer.println(text);
writer.flush();
} catch (IOException e) {
l.error("Bat initialization of the output client stream");
e.printStackTrace();
}
//Should show the answers from the server, i run this as a thread
public void showServerOutput(){
String message;
while(true){
//If there are new messages
try {
BufferedReader br= new BufferedReader(new InputStreamReader((cs.getInputStream())));
if((message=br.readLine())!=null){
//Show them
System.out.println(message);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
showServerOutput()
ist die Methode, die jeder zurückgibt
Dann meine Serverklasse haben den folgenden Code
public class Server extends Service{
public void startListenner(){
l.info("Listening at port "+PORT);
while(true){
// Waits for a client connection
try {
cs=ss.accept();
l.info("Connection received: "+cs.getInetAddress()+":"+cs.getPort());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
toClient= new DataOutputStream(cs.getOutputStream());
PrintWriter cWriter= new PrintWriter(toClient);
//Send a confirmation message
cWriter.println("Message received");
//Catch the information sent by the client
csInput=new BufferedReader(new InputStreamReader(cs.getInputStream()));
printData();
toClient.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
Wie Sie im Senden einer Nachricht an den Client mit den Worten sehen Antwort von dem Server
gesendet: „Nachricht empfangen“, aber es ist nie in dem Client angezeigt Konsole. Was ist los mit dir?EDIT
Die printData()
Methode druckt die Nachricht von dem Client in der Konsole
public void printData(){
l.info("Printing message received");
try {
System.out.println(csInput.readLine());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
Dieser Thread fragte oft auf SO, haben Sie versucht, verwandte Themen zu überprüfen? – Omore
Ja, ich habe ein bisschen recherchiert, bevor ich das geschrieben habe, aber das hat mir nicht geholfen. Ich habe wirklich darüber nachgedacht, die Tatsache, einen Thread zu erstellen, der so gefragt wurde, aber wie ich sagte, fand ich nicht die falsche Sache in meinem Code. Es tut mir leid wegen dieses unnötigen Threads. – JD0001