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

Java 简单客户机-服务器程序的问题

Java 简单客户机-服务器程序的问题,java,client-server,Java,Client Server,我已经编写了双向客户机-服务器通信,其中客户机首先发送消息,然后服务器发送回复。但是,客户端在读取服务器发送的回复时被阻止(即,客户端没有打印任何内容,但服务器已正确发送回复)。代码如下:- 服务器代码:- import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputS

我已经编写了双向客户机-服务器通信,其中客户机首先发送消息,然后服务器发送回复。但是,客户端在读取服务器发送的回复时被阻止(即,客户端没有打印任何内容,但服务器已正确发送回复)。代码如下:-

服务器代码:-

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class Server
{
    // Socket for accepting connections.
    private static Socket socket;

    public static void main( String[] args )
    {
        try
        {
            int port = 2550;
            // Creating server socket on specified port.
            ServerSocket serverSocket = new ServerSocket(port);
            System.out.println("Server started listening on port "+port);

            while(true)
            {
                // Accept the connection and read the message.
                socket = serverSocket.accept();
                BufferedReader br = new BufferedReader( new InputStreamReader( socket.getInputStream()));
                String message = br.readLine();
                System.out.println("Message recieved from client is :- " + message);

                // Prepare and send the response back to client.
                BufferedWriter bw = new BufferedWriter( new OutputStreamWriter( socket.getOutputStream()));
                String reply = "Thanks.Your reply has been recieved";
                bw.write(reply);
                bw.flush();
            }
        }
        catch( Exception e )
        {
            e.printStackTrace();
        }
        finally
        {
            try
            {
                socket.close();
            }
            catch( Exception e )
            {
            }

        }
    }
}
客户端代码:-

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.InetAddress;
import java.net.Socket;

public class Client
{
    private static Socket socket;

    public static void main( String[] args )
    {
        try
        {
            String host = "localhost";
            int port = 2550;

            InetAddress address = InetAddress.getByName(host);
            socket = new Socket(address, port);

            // Send the message to the server.
            BufferedWriter bw = new BufferedWriter( new OutputStreamWriter( socket.getOutputStream()));
            String message = "This is the message from Client.\n";
            bw.write(message);
            bw.flush();
            System.out.println("Message sent to the server :- " + message);

            // Get the reply from the server.
            BufferedReader br = new BufferedReader( new InputStreamReader( socket.getInputStream()));
            String reply = br.readLine();
            System.out.println("Message recieved from the server :- " + reply);
        }
        catch( Exception e )
        {
            e.printStackTrace();
        }
        finally
        {
            // Closing the socket.
            try
            {
                socket.close();
            }
            catch( Exception e )
            {
                e.printStackTrace();
            }
        }
    }
}

D:\Java_P>java Server
Server started listening on port 2550
Message recieved from client is :- This is the message from Client.

D:\Java_P>java Client
Message sent to the server :- This is the message from Client.

发生这种情况是因为您的服务器发送的“谢谢。您的答复已收到”,其中不包含任何换行符。原因是,在客户机中,缓冲读取器readline方法阻塞,直到找到换行符

进行以下更改:

String reply = "Thanks.Your reply has been recieved\nDummy line 1";

现在,您可以在客户端日志中看到这些行。

是否有可能到服务器的内部套接字连接足够快,以至于服务器在客户端创建读卡器捕获回复之前发送回复?另外,您是否启动了两个单独的终端,或者只启动一个终端来运行两个程序?在客户端代码中,在发送消息之前,请尝试创建
BufferedReader
。由于客户机和服务器同时运行,服务器*可能*在客户机能够接收到回复之前发送回复。@Gliderman我也怀疑这一点。是的,我启动了不同的终端。@Uber也尝试了,但没有成功。:)。我最近也遇到了同样的问题。我试图实现自己的简单web服务器。