你好我的应用程序java上有一个错误,这个应用程序从客户端向服务器发送值,服务器对接收到的值执行2的权限,并将其返回给客户端,一切正常,但它只能运行一次它播放一旦服务器不再接收值,我无法理解问题是什么,我该如何解决这个问题?代码在
之下客户端:
import java.io.*;
import java.net.*;
public class Client{
public static void main(String args[]){
try{
//controllo che i valori siano corretti
/* if(args.lenght != 2){
System.out.println(" Errore la sintassi ");
System.exit(1);
}
*/
String host=""+args[0];
int port=Integer.parseInt(args[1]);
// System.out.println("\n Scriverò sul socket "+host);
// System.out.println("\n Porta: "+port);
//leggo valori da input
BufferedReader input=new BufferedReader(new InputStreamReader(System.in));
System.out.println("\n Inserisci un valore (CLIENT): ");
String lettura=input.readLine();
while(!lettura.equals("fine")){
System.out.println("\n Inserisci un valore (CLIENT): ");
Socket s=new Socket(host,port);
PrintWriter output=new PrintWriter(s.getOutputStream());
output.println(lettura);
output.flush();
//attendo dal server il risultato
BufferedReader insok = new BufferedReader(new InputStreamReader(s.getInputStream()));
String lettsock=insok.readLine();
//System.out.println(" Ho ricevuto dal server il valore "+insok.readLine());
System.out.println("\n Ho ricevuto dal server : "+lettsock);
lettura=input.readLine();
}
// System.out.println("\n Client Terminato con successo \n");
//chiusura input
input.close();
}
catch(Exception ex){
System.out.println("\n Errore: " + ex);
System.exit(2);
}
}
}
服务器
import java.io.*;
import java.net.*;
public class Server{
static final int PORT = 1024;
public static void main(String args[]){
try{
ServerSocket ss=new ServerSocket(PORT);
while(true) {
Socket ns = ss.accept();
BufferedReader networkIn = new BufferedReader(new InputStreamReader(ns.getInputStream()));
PrintWriter networkOut=new PrintWriter(ns.getOutputStream());
String line;
System.out.println("\n Attendo valori \n ");
while ((line = networkIn.readLine()) != null) {
System.out.println("Ricevuto: " + line);
try{
int number=Integer.parseInt(line);
number=number*number;
networkOut.println(number);
networkOut.flush();
}
catch(Exception ex){
System.out.println("\n Non mi hai inviato un numero \n");
}
}
ns.close();
}
}
catch(Exception ex){
System.out.println("\n Errore Server: "+ex);
System.exit(2);
}
}
}
答案 0 :(得分:0)
这可能与客户端正在其while
循环中打开一个套接字然后不关闭它的事实有关。
服务器不知道套接字没有关闭,所以仍然等待它的输入。
尝试将客户端连接代码(下面)移到while
循环之前。
Socket s=new Socket(host,port);
PrintWriter output=new PrintWriter(s.getOutputStream());
BufferedReader insok = new BufferedReader(new InputStreamReader(s.getInputStream()));
此外,您的服务器的while
循环应该有一种退出方式,因为目前退出的唯一方法是它是否会抛出异常,这不是理想的...
也许这样做,以便当客户端发送消息“关闭”时,它会断开连接。