Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.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
简单echo java客户机-服务器程序_Java - Fatal编程技术网

简单echo java客户机-服务器程序

简单echo java客户机-服务器程序,java,Java,我正在尝试制作一个简单的echo客户端服务器程序。我能够将值从客户端发送到服务器并打印出来。但我无法将值从服务器返回到客户端这是下面的代码 客户端代码 public class Client_1 { /** * @param args the command line arguments */ public static void main(String[] args) throws IOException { System.out.println("client signing

我正在尝试制作一个简单的echo客户端服务器程序。我能够将值从客户端发送到服务器并打印出来。但我无法将值从服务器返回到客户端这是下面的代码

客户端代码

public class Client_1 {

/**
 * @param args the command line arguments
 */
public static void main(String[] args) throws IOException {
    System.out.println("client signing on");
    Socket soc = new Socket("127.0.0.1", 5556);
    t t = new t(soc);
    Thread t1 = new Thread(t);
    t1.start();
    OutputStream os = soc.getOutputStream();

    OutputStreamWriter osw = new OutputStreamWriter(os);
    BufferedWriter bw = new BufferedWriter(osw);
    PrintWriter pw = new PrintWriter(bw, true);
    InputStream is = System.in;
    InputStreamReader isr = new InputStreamReader(is);
    BufferedReader br = new BufferedReader(isr);
    String s = br.readLine();
    while (!s.equals("end")) {
        //  System.out.println(s);
        pw.println(s);
        s = br.readLine();
    }
    pw.println("end");
    System.out.println("client signing off");
}
}

}

服务器代码

public class server {

static Socket soc;
static String r;
static BufferedReader br;

/**
 * @param args the command line arguments
 */
public static void main(String[] args) {

    try {
        System.out.println("server signing on");
        ServerSocket ss = new ServerSocket(5556);
        soc = ss.accept();
        InputStream is = soc.getInputStream();
        InputStreamReader isr = new InputStreamReader(is);
         OutputStream os;
        os = soc.getOutputStream();
         OutputStreamWriter osw = new OutputStreamWriter(os);
        BufferedWriter bw = new BufferedWriter(osw);
        PrintWriter pw = new PrintWriter(bw,true);

        br = new BufferedReader(isr);
        r = br.readLine();
        while (!r.equals("end")) {
            System.out.println(r);
        //   PrintWriter out = new PrintWriter(new FileWriter("c:\\outputfile.txt")); 
            pw.print("test");
            pw.print(r);
            r = br.readLine();

        }pw.print("end");
        System.out.println("server signing off");
    } catch (Exception e) {
        System.out.println(e);
    }
}
}


提前谢谢。

您要在服务器代码中的什么位置写入客户端?您是否正在尝试在服务器控制台上写入,并希望它出现在客户端控制台上?然后,您需要生成一个线程,并与其共享输出流对象,以便直接返回到客户机。如果您只想回显客户端在控制台中键入的字符串,请添加os.write(r.getBytes());和os.flush();在while循环的底部。

客户机执行println,因此readLine在服务器上工作,而服务器执行打印,因此没有新行,客户机等待它。我想要回显客户机键入的字符串。我试着写,它确实起作用了。但是我没有用flush,而是用PrintWriter pw=new PrintWriter(bw,true)代替了flush,我在PrintWriter中写了true,为什么它不起作用…?@nikalldway这可能有助于解释为什么。基本上,您需要调用一个println或printf来进行自动刷新。
public class server {

static Socket soc;
static String r;
static BufferedReader br;

/**
 * @param args the command line arguments
 */
public static void main(String[] args) {

    try {
        System.out.println("server signing on");
        ServerSocket ss = new ServerSocket(5556);
        soc = ss.accept();
        InputStream is = soc.getInputStream();
        InputStreamReader isr = new InputStreamReader(is);
         OutputStream os;
        os = soc.getOutputStream();
         OutputStreamWriter osw = new OutputStreamWriter(os);
        BufferedWriter bw = new BufferedWriter(osw);
        PrintWriter pw = new PrintWriter(bw,true);

        br = new BufferedReader(isr);
        r = br.readLine();
        while (!r.equals("end")) {
            System.out.println(r);
        //   PrintWriter out = new PrintWriter(new FileWriter("c:\\outputfile.txt")); 
            pw.print("test");
            pw.print(r);
            r = br.readLine();

        }pw.print("end");
        System.out.println("server signing off");
    } catch (Exception e) {
        System.out.println(e);
    }
}