Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.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客户端不是';t读取整个套接字响应_Java_Sockets_Server_Client_Reusability - Fatal编程技术网

我的Java客户端不是';t读取整个套接字响应

我的Java客户端不是';t读取整个套接字响应,java,sockets,server,client,reusability,Java,Sockets,Server,Client,Reusability,我正在编写一个java-c客户机服务器,其中服务器是c语言,客户机是java语言。这个插座可以重复使用。我不知道为什么,但是客户端从套接字读取第一个响应,然后循环,这就像客户端没有得到“\n”。我没有得到什么? C服务器以(length:stringlength:string)等格式发送响应 import java.io.*; 导入java.net。*; 公共类客户端{ 公共静态void main(字符串[]args){ 如果(参数长度!=2){ System.err.println(“使用:j

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

import java.io.*;
导入java.net。*;
公共类客户端{
公共静态void main(字符串[]args){
如果(参数长度!=2){
System.err.println(“使用:java客户机服务器端口”);
系统出口(1);
}
试一试{
BufferedReader fromUser=新的BufferedReader(新的InputStreamReader(System.in));
System.out.println(“插入input1:”);
字符串input1=fromUser.readLine();
System.out.println(“插入input2:”);
字符串input2=fromUser.readLine();
sockets=newsocket(args[0],Integer.parseInt(args[1]);
//BufferedReader fromServer=新的BufferedReader(新的InputStreamReader(s.getInputStream(),“UTF-8”);
InputStream=s.getInputStream();
BufferedWriter-toServer=新的BufferedWriter(新的OutputStreamWriter(s.getOutputStream(),“UTF-8”);
做{
字符串消息=“(“+input1.getBytes(“UTF-8”).length+”:“+input1+input2.getBytes(“UTF-8”).length+”:“+input2+”)”;
toServer.write(消息);
toServer.flush();
/*正在从服务器读取结果*/
//琴弦浅黄色;
字符串输出=”;
字节[]缓冲区=新字节[4096];
int-read;
而((read=is.read(buffer))!=-1){
输出=新字符串(缓冲区,0,读取);
系统输出打印(输出);
System.out.flush();
};
if(output.charAt(0)!=”(“| | output.charAt(output.length()-1)!=”){
System.out.println(“使用协议时出错”);
}

如果(output.indexOf(':'),您希望您的客户端何时停止循环?在读取整个服务器输出的特定输入后!它如何知道何时读取整个服务器输出?您的代码将一直读取,直到套接字关闭。类似于“while((read=is.read(buffer))!=-1”工作不正常。它工作正常。
read
如果套接字已关闭,则返回-1。服务器是否在发送响应后关闭套接字?您希望客户端何时停止循环?在读取整个服务器输出的特定输入后!它如何知道何时读取整个服务器输出?您的代码保持读取状态g直到套接字关闭。就像“while((read=is.read(buffer))!=-1”工作不正常。它工作正常。
read
如果套接字关闭,返回-1。服务器是否在发送响应后关闭套接字?
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);
        }
    }
}