gpt4 book ai didi

java - 使用 java 的客户端/服务器程序将无法工作

转载 作者:太空宇宙 更新时间:2023-11-04 07:40:36 25 4
gpt4 key购买 nike

我正在尝试使用 java 创建客户端/服务器程序。

当客户端连接到服务器时,服务器会向他显示一条消息,要求他输入第一个值。当用户写入第一个值时,服务器会向他发送一条消息,要求他写入 sencd 值。当用户写入第二个值时,服务器会向他显示一个操作列表,并等到客户端写入操作的编号,然后服务器会向他发送该操作的结果。

当我编写程序代码并运行服务器,然后运行客户端时,它不会执行任何操作,服务器被阻止执行任何操作,客户端也是如此。

这是我尝试过的代码:

对于客户:

import java.net.*;
import java.util.Scanner;
import java.io.*;


public class Client {

final static String ADRSS = "localhost";
final static int PORT = 1234;
static Socket s = null;

public static void main(String[] args) {

try{


Scanner cn = new Scanner(System.in);
s = new Socket(ADRSS, PORT);
PrintWriter out = new PrintWriter(s.getOutputStream());
BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream()));
in.readLine();
out.println(cn.nextLine());
out.flush();
in.readLine();
out.println(cn.nextLine());
out.flush();
in.readLine();
out.println(cn.nextLine());
out.flush();

System.out.println("Res = " + in.readLine());
out.flush();

}
catch(IOException e){e.printStackTrace();

}


}

}

对于服务器:

  import java.net.*;
import java.io.*;

public class Server {


final static int PORT = 1234;
private static ServerSocket server;

public static void main(String[] args) {
Socket s = null;
try {
server = new ServerSocket(PORT);
s = server.accept();
PrintWriter out = new PrintWriter(s.getOutputStream());
BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream()));
out.println("Donner le premier nombre : ");
out.flush();
double n1 = Double.parseDouble(in.readLine());
out.println("Donner le deuxiéme nombre : ");
out.flush();
double n2 = Double.parseDouble(in.readLine());

out.println("Donner l'op : ");
out.flush();

String choix = in.readLine();
String res = null;

switch(choix){

case "1" :
res = String.valueOf(n1 + n2);
break;
case "2" :
res = String.valueOf(n1 - n2);
break;
case "3" :
res = String.valueOf(n1 * n2);
break;
case "4" :
res = (n2 == 0) ? "Impossible d'éfectuer l'op" : String.valueOf(n1 / n2);
break;
default :
res = "erreur";
}

out.println(res);
out.flush();

}catch(IOException e) {
e.printStackTrace();
}finally{
try{
s.close();
}catch(IOException e){e.printStackTrace();}
}

}

}

最佳答案

使用常规 print 后,

PrintWriter 不会刷新输出(请参阅 documentation of PrintWriter )。你必须手动冲洗它。然而,真正的原因是你的客户等待换行符,但这种情况永远不会发生。在服务器端更改为 out.println 应该可以使其运行,并覆盖刷新。

关于java - 使用 java 的客户端/服务器程序将无法工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16113659/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com