我的java客户端没有读取整个套接字响应

lndjwyie  于 2021-06-29  发布在  Java
关注(0)|答案(0)|浏览(186)

我正在编写一个java-c客户机服务器,其中服务器是c语言,客户机是java语言。插座可重复使用。我不知道为什么,但是客户端从套接字读取第一个响应,然后循环,就像客户端没有得到“\n”。我没有得到什么?c服务器以以下格式发送响应(length:stringlength:string)等

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

public class client {
    public static void main(String[] args) {

        if (args.length != 2) {
            System.err.println("Use: java Client server port");
            System.exit(1);
        }

        try{
            BufferedReader fromUser = new BufferedReader(new InputStreamReader(System.in));

            System.out.println("Insert input1: ");
            String input1 = fromUser.readLine();

             System.out.println("Insert input2: ");
                String input2 = fromUser.readLine();

                Socket s = new Socket(args[0], Integer.parseInt(args[1]));
                //BufferedReader fromServer = new BufferedReader(new InputStreamReader(s.getInputStream(),"UTF-8"));
                InputStream is = s.getInputStream();
                BufferedWriter toServer = new BufferedWriter(new OutputStreamWriter(s.getOutputStream(),"UTF-8"));

            do {

                String message = "(" + input1.getBytes("UTF-8").length + ":" + input1 + input2.getBytes("UTF-8").length + ":" + input2 + ")";
                toServer.write(message);
                toServer.flush();

                /*reading result from server*/
                //String buff;
                String output = "";
                byte[] buffer = new byte[4096];
                int read;
                while((read = is.read(buffer)) != -1) {
                    output = new String(buffer, 0, read);
                    System.out.print(output);
                    System.out.flush();

                };

                if(output.charAt(0) != '(' || output.charAt(output.length()-1) != ')'){
                    System.out.println("error using protocol");
                }

                if(output.indexOf(':')<0){
                    System.err.println("error using Canonical S-expression!");
                    System.exit(2);
                }

                for(int i=output.indexOf(":")+1;i<output.length()-2;i++){
                    System.out.print(output.charAt(i));
                }
                System.out.println();

                s.close();

                System.out.println("Insert input1: ('end' to exit)");
                input1 = fromUser.readLine();

            } while(!input1.equals("end"));
        }
        catch(IOException e){
            System.err.println(e.getMessage());
            e.printStackTrace();
            System.exit(100);
        }
    }
}

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题