Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用java的客户机/服务器程序;行不通_Java_Client Server - Fatal编程技术网

使用java的客户机/服务器程序;行不通

使用java的客户机/服务器程序;行不通,java,client-server,Java,Client Server,我正在尝试用java创建一个客户机/服务器程序 当客户端连接到服务器时,当用户写入第一个值时,服务器将向他显示输入第一个值的消息。当用户写入第二个值时,服务器将向他显示操作列表,并等待客户端写入操作编号,然后服务器将向他发送此操作的结果手术 当我编写程序代码并运行服务器和客户机时,它不做任何事情服务器被阻止做任何事情,客户机也一样 这是我尝试的代码: 对于客户端: import java.net.*; import java.util.Scanner; import java.io.*; p

我正在尝试用java创建一个客户机/服务器程序

当客户端连接到服务器时,当用户写入第一个值时,服务器将向他显示输入第一个值的消息。当用户写入第二个值时,服务器将向他显示操作列表,并等待客户端写入操作编号,然后服务器将向他发送此操作的结果手术

当我编写程序代码并运行服务器和客户机时,它不做任何事情服务器被阻止做任何事情,客户机也一样

这是我尝试的代码:

对于客户端:

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();}
        }

    }

}
对于服务器:

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();}
        }

    }

}

PrintWriter
在使用常规
print
后不会刷新输出(请参阅)。你必须手动冲洗。然而,真正的原因是您的客户机等待换行符,而这永远不会发生。在服务器端更改为
out.println
应使其运行,并覆盖刷新。

PrintWriter
在使用常规
打印后不会刷新输出(请参阅)。你必须手动冲洗。然而,真正的原因是您的客户机等待换行符,而这永远不会发生。在服务器端更改为
out.println
应使其运行,并覆盖刷新。

首先,在服务器中每次打印后,添加

out.flush();
第二,您要求的是nextLine(),但打印时没有\n,
将\n添加到每个字符串的结尾或使用out.println

首先,在服务器中每次打印后,添加

out.flush();
第二,您要求的是nextLine(),但打印时没有\n,
将\n添加到每个字符串的结尾或使用out.println

看起来,一旦连接工作,至少服务器应该打印一些输出。你怎么知道程序被“阻止”?也许您应该尝试在System.err上打印一些内容,以确保程序通过连接?您是否在客户端的标准输入中输入了任何内容?因为它在等你输入3行。服务器正在等待来自客户端的3行。@JBNizet是,我在客户端输入输入,但不输入任何内容happens@TNW服务器应该在第一次在客户机服务器中打印消息,但在没有调试器的情况下进行调试时,不会添加足够的调试跟踪。您正在从服务器上读取3行内容,但没有在任何地方打印它们。所以你无法理解到底发生了什么。当然,使用调试器将是更好的解决方案。另外,为什么客户端上有一个循环试图一次又一次地打开同一个套接字?看起来,一旦连接工作,至少服务器应该打印一些输出。你怎么知道程序被“阻止”?也许您应该尝试在System.err上打印一些内容,以确保程序通过连接?您是否在客户端的标准输入中输入了任何内容?因为它在等你输入3行。服务器正在等待来自客户端的3行。@JBNizet是,我在客户端输入输入,但不输入任何内容happens@TNW服务器应该在第一次在客户机服务器中打印消息,但在没有调试器的情况下进行调试时,不会添加足够的调试跟踪。您正在从服务器上读取3行内容,但没有在任何地方打印它们。所以你无法理解到底发生了什么。当然,使用调试器将是更好的解决方案。另外,为什么客户端上有一个循环试图一次又一次地打开同一个套接字?