Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.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_Sockets_Client Server - Fatal编程技术网

客户机-服务器通信java

客户机-服务器通信java,java,sockets,client-server,Java,Sockets,Client Server,我在客户机-服务器应用程序中遇到问题。客户端向服务器发送一张图片,服务器用回复消息进行响应 这是我的服务器代码: public class Server { public static void main(String[] args) throws Exception { String response="response"; ServerSocket socket = new ServerSocket(3333); while (

我在客户机-服务器应用程序中遇到问题。客户端向服务器发送一张图片,服务器用回复消息进行响应

这是我的服务器代码:

public class Server
{
    public static void main(String[] args) throws Exception
    {
        String response="response";
        ServerSocket socket = new ServerSocket(3333);
        while (true)
        {
            Socket clientSocket = socket.accept();

            DataInputStream dis = new DataInputStream(clientSocket.getInputStream());
            FileOutputStream fout = new FileOutputStream("output.jpg");
            int i;
            while ( (i = dis.read()) > -1) 
                fout.write(i);    

            DataOutputStream outToClient= new    DataOutputStream(clientSocket.getOutputStream());

            outToClient.writeBytes(response);

            fout.flush();
            fout.close();
            dis.close();
            outToClient.close();
            clientSocket.close();
        }
    }
}
客户:

public static void main(String[] args) throws Exception
{
    // TODO Auto-generated method stub
    String sentence;
    int i;
    FileInputStream fis = new FileInputStream ("pathphoto.jpg");   
    Socket sock = new Socket ("hostname",3333);
    DataOutputStream os = new DataOutputStream(sock.getOutputStream());
    System.out.println("Sending....");
    while ((i = fis.read()) > -1)
        os.write(i);

    BufferedReader inFromServer= new BufferedReader(new InputStreamReader(sock.getInputStream()));
    sentence=inFromServer.readLine();
    System.out.println("FROM SERVER: " + sentence);
    fis.close();
    os.close();
    sock.close();
}
}
问题是客户端没有收到来自服务器的响应,我认为大致如下:

BufferedReader inFromServer= new BufferedReader(new InputStreamReader(sock.getInputStream()));
sentence=inFromServer.readLine();
因为没有它们,服务器会发送响应

关于如何修复它有什么建议吗?

它没有卡在BufferedReader中,实际上是卡在BufferedReader中了 而((i=fis.read())>-1) 由于您的客户机从未告诉服务器流的长度,或者关闭的流服务器将尝试从inputstream读取下一个字节,并且当客户机发送完文件并等待服务器的响应时,将被卡住

当您删除从服务器读回响应的代码时,客户端将继续并关闭所有流,在这种情况下,服务器将读取-1并继续执行。

它并没有卡在BufferedReader中,而是实际卡在了BufferedReader中 而((i=fis.read())>-1) 由于您的客户机从未告诉服务器流的长度,或者关闭的流服务器将尝试从inputstream读取下一个字节,并且当客户机发送完文件并等待服务器的响应时,将被卡住


当您删除从服务器读回响应的代码时,客户端将继续并关闭所有流,在这种情况下,服务器将读取-1并继续执行。

您是如何运行此操作的?在两个不同的地方?如果是,两个THRED是否一直处于活动状态?是否有一个应用程序在另一个应用程序可以读/写套接字之前关闭?检查是否关闭套接字过快。您的客户端代码中有一个额外的
}
,希望这只是一个输入错误,或者它确实需要关闭。您是如何运行此操作的?在两个不同的地方?如果是,两个THRED是否一直处于活动状态?是否有一个应用程序在另一个应用程序可以读/写套接字之前关闭?检查是否关闭套接字过快。您的客户端代码中有一个额外的
}
,希望这只是一个输入错误,或者它确实需要关闭。我尝试将os.close放在BufferedReDar之前,但它会启动一个异常,因为它关闭了套接字。我尝试将os.close放在BufferedReDar之前,但它会启动一个异常,因为它关闭了套接字关闭插座