您好我的程序有一个小问题,这是一个简单的客户端/服务器。客户端将文本文件的内容发送到服务器。文本文件只是整数,然后服务器假设发送回文本文件中每个int的最大素数(如果它的素数应该只发回素数而什么都不做)。所以比如说文本文件是5 15 28.运行程序后的结果应该是5 13 23。
这是我的客户端代码:
public class TCPClient {
public static void main(String[] args) throws Exception{
try{
Socket mySock = new Socket("127.0.0.1", 12001);
BufferedReader in = new BufferedReader(
new InputStreamReader(mySock.getInputStream()));
PrintStream out = new PrintStream( mySock.getOutputStream());
Scanner scan = new Scanner(new File(args[0]));
String msg = scan.nextLine();
out.println(msg);
System.out.println(in.readLine());
mySock.close();
}catch (Exception e){
}
}
}
这是我的服务器端代码:
public class TCPServer {
public static void main(String[] args) throws Exception {
try{
ServerSocket mySock = new ServerSocket(12001);
Socket client = mySock.accept();
BufferedReader in = new BufferedReader(
new InputStreamReader(client.getInputStream()));
PrintStream out = new PrintStream( client.getOutputStream());
String[] arr = in.readLine().split(" ");
int[] intarr = new int[arr.length];
for(int i = 0; i <arr.length; i++){
intarr[i] = Integer.parseInt(arr[i]);
if (prim(intarr[i]) == true){
out.println(intarr[i]);
}else{
while (!prim(--intarr[i])){
}
out.println(intarr[i]);
}
}
client.close();
mySock.close();
}catch (Exception e){
}
}
public static boolean prim(int m){
int n=m;
for(int i=2;i<n;i++){
if(n%i == 0){
return false;
}
}
return true;
}
}
当我运行此程序时,我的输出只是文本文件中的第一个数字。因此,如果我的文本文件是1 3 5.我的输出只是1.但是,我的主要算法至少有效,因为如果我的文本文件是8,例如,我的程序将返回7.有人知道为什么会发生这种情况吗? / p>
答案 0 :(得分:0)
将服务器代码更改为简单测试并打印到System.out
String[] arr = "1 3 5 6".split(" ");
int[] intarr = new int[arr.length];
for(int i = 0; i <arr.length; i++){
intarr[i] = Integer.parseInt(arr[i]);
if (prim(intarr[i]) == true){
System.out.println(intarr[i]);
}else{
while (!prim(--intarr[i])){
}
System.out.println(intarr[i]);
}
}
你可以看到它工作正常,但在你的代码中,你的输出是用println
写的,所以你的客户端需要循环System.out.println(in.readLine());
或者改变你的服务器来使用一行和一些分隔符来写
答案 1 :(得分:0)
在TCPServer中,当打印到outputstream时使用print而不是println
for(int i = 0; i <arr.length; i++){
intarr[i] = Integer.parseInt(arr[i]);
if (prim(intarr[i]) == true){
out.print(intarr[i]); // use print instead of println
}else{
while (!prim(--intarr[i])){
}
out.print(intarr[i]); // use print instead of println
}
}