java - 客户端服务器端通信java

标签 java sockets client-server

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

这是我的服务器代码:

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中,它实际上卡在 while ((i = fis.read()) > -1) 由于您的客户端从未告诉服务器流的长度,或者关闭的流服务器将尝试从输入流读取下一个字节,并且当客户端完成发送文件并等待服务器响应时将被卡住。

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

关于java - 客户端服务器端通信java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13231880/

相关文章:

java - 接收来自客户端的消息

c-客户端服务器套接字编程-发送文件

java - 使用 bufferedimage java swing 绘制多个形状

java - 如何使用 Jersey Client 将 HTTP 400 响应解析为 Java 类?

java - 在 Java 中使用 String.matches 中的正则表达式来匹配日期格式

c# - UDP Socket绑定(bind)任何IP? (通配符 - 特殊)

ios - iOS 中的 IRC/TOPIC 命令修整问题

java - 智能 : non absolute (relative) path to resources

Java 文件写入器 : Repeated File Open/Close(Multiple Instance) vs Single Open/Close(Single Instance) on Client-Server Environment

java - 如何从服务器验证客户端代码未被修改