在javafx中向服务器发送字符串不起作用
我有一个JavaFX应用程序,它读取数字输入,然后将其发送到服务器。服务器计算其数字之和,然后将结果返回给应用程序。我使用任务类是为了不改变应用程序的主线程 应用程序的部分代码在javafx中向服务器发送字符串不起作用,java,javafx,Java,Javafx,我有一个JavaFX应用程序,它读取数字输入,然后将其发送到服务器。服务器计算其数字之和,然后将结果返回给应用程序。我使用任务类是为了不改变应用程序的主线程 应用程序的部分代码 calculate.setOnAction(new EventHandler<ActionEvent>() { @Override public void handle(ActionEvent event) { Task<String> ta
calculate.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
Task<String> task = new Task<String>() {
String result_from_server;
@Override
protected String call() throws Exception {
try(Socket socket = new Socket("localhost",PORT);
PrintWriter out = new PrintWriter(socket.getOutputStream(),true);
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()))){
warning.setText("");
result.setText("");
if(!input.getText().equalsIgnoreCase("")){
out.print(input.getText());
result_from_server = in.readLine();
}
} catch (IOException e) {
e.printStackTrace();
}
return result_from_server;
}
};
task.setOnSucceeded(event1 -> {
result.setText(task.getValue());
});
new Thread(task).start();
}
});
calculate.setOnAction(新的EventHandler(){
@凌驾
公共无效句柄(ActionEvent事件){
任务=新任务(){
来自\u服务器的字符串结果\u;
@凌驾
受保护的字符串调用()引发异常{
try(套接字=新套接字(“本地主机”,端口);
PrintWriter out=新的PrintWriter(socket.getOutputStream(),true);
BufferedReader in=新的BufferedReader(新的InputStreamReader(socket.getInputStream())){
警告.setText(“”);
result.setText(“”);
if(!input.getText().equalsIgnoreCase(“”){
out.print(input.getText());
结果\u from_server=in.readLine();
}
}捕获(IOE异常){
e、 printStackTrace();
}
从_服务器返回结果_;
}
};
task.SetOnSucceed(事件1->{
result.setText(task.getValue());
});
新线程(任务).start();
}
});
服务器
public class QuersummeServer{
static final int PORT = 4444;
public static void main(String[] args){
try(ServerSocket ss = new ServerSocket(PORT);
Socket cs = ss.accept();
PrintWriter out = new PrintWriter(cs.getOutputStream(),true);
BufferedReader in = new BufferedReader(new InputStreamReader(cs.getInputStream()))){
String number = in.readLine();
int result = calculate(number);
out.print(result);
}catch (IOException e){
e.printStackTrace();
}
}
private static int calculate(String number) {
int result = 0;
for(int i = 0;i<number.length();i++){
result+= Integer.valueOf(number.substring(i,i+1));
}
return result;
}}
公共类查询服务器{
静态最终int端口=4444;
公共静态void main(字符串[]args){
try(ServerSocket ss=newserversocket(端口);
套接字cs=ss.accept();
PrintWriter out=新的PrintWriter(cs.getOutputStream(),true);
BufferedReader in=新的BufferedReader(新的InputStreamReader(cs.getInputStream())){
字符串编号=in.readLine();
int结果=计算(数字);
打印(结果);
}捕获(IOE异常){
e、 printStackTrace();
}
}
私有静态整数计算(字符串编号){
int结果=0;
对于(int i=0;i在out.print(input.getText());
调用out.flush()
什么是什么意思,没有发生错误吗?没有错误,我发现服务器在in.readLine()之后阻塞,但我不知道原因。in.readLine()
在服务器或客户机中??在服务器中,客户机在尝试从服务器读取响应后会阻塞,但由于服务器在in.readLine()之后阻塞,因此该响应从未出现。请尝试在客户机中调用out.flush()
打印数据后的方法。您遇到了什么样的异常?请尝试该方法,改为写入打印,然后刷新仍然没有成功:/n您认为客户端发送数据,或者问题是服务器何时接收?服务器没有接收到任何信息,但我不知道客户端是否正在发送..可能是服务器没有接收或客户机没有发送消息