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

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

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

  1. import java.io.*;
  2. import java.net.*;
  3. public class client {
  4. public static void main(String[] args) {
  5. if (args.length != 2) {
  6. System.err.println("Use: java Client server port");
  7. System.exit(1);
  8. }
  9. try{
  10. BufferedReader fromUser = new BufferedReader(new InputStreamReader(System.in));
  11. System.out.println("Insert input1: ");
  12. String input1 = fromUser.readLine();
  13. System.out.println("Insert input2: ");
  14. String input2 = fromUser.readLine();
  15. Socket s = new Socket(args[0], Integer.parseInt(args[1]));
  16. //BufferedReader fromServer = new BufferedReader(new InputStreamReader(s.getInputStream(),"UTF-8"));
  17. InputStream is = s.getInputStream();
  18. BufferedWriter toServer = new BufferedWriter(new OutputStreamWriter(s.getOutputStream(),"UTF-8"));
  19. do {
  20. String message = "(" + input1.getBytes("UTF-8").length + ":" + input1 + input2.getBytes("UTF-8").length + ":" + input2 + ")";
  21. toServer.write(message);
  22. toServer.flush();
  23. /*reading result from server*/
  24. //String buff;
  25. String output = "";
  26. byte[] buffer = new byte[4096];
  27. int read;
  28. while((read = is.read(buffer)) != -1) {
  29. output = new String(buffer, 0, read);
  30. System.out.print(output);
  31. System.out.flush();
  32. };
  33. if(output.charAt(0) != '(' || output.charAt(output.length()-1) != ')'){
  34. System.out.println("error using protocol");
  35. }
  36. if(output.indexOf(':')<0){
  37. System.err.println("error using Canonical S-expression!");
  38. System.exit(2);
  39. }
  40. for(int i=output.indexOf(":")+1;i<output.length()-2;i++){
  41. System.out.print(output.charAt(i));
  42. }
  43. System.out.println();
  44. s.close();
  45. System.out.println("Insert input1: ('end' to exit)");
  46. input1 = fromUser.readLine();
  47. } while(!input1.equals("end"));
  48. }
  49. catch(IOException e){
  50. System.err.println(e.getMessage());
  51. e.printStackTrace();
  52. System.exit(100);
  53. }
  54. }
  55. }

暂无答案!

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

相关问题