Java Nio的简单客户端-服务器示例

时间:2018-11-22 20:54:45

标签: java server client client-server nio

请您给我看一个使用java nio进行通信的客户端和服务器的本地主机的小例子吗?我需要了解它如何工作。例如1)客户端需要连接,客户端连接客户端发送“你好,我是客户端”。 2)服务器接受,服务器从客户端接收消息,服务器响应“你好,我是服务器” 3)客户端发送“你好服务器” 4)服务器发送“你好客户端”。

我不需要服务器一次处理多个客户端,我需要了解的是客户端与服务器之间如何与多个消息建立连接。

2 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

如果您不打算处理多个连接,则不太确定为什么需要使用nio。我看不出使用它们的意义。

好的,这里去了:让我知道这是否有效。

服务器代码:

public class Server {

ServerSocket socket;
Socket listener;

public Server(int port) throws IOException {
    socket = new ServerSocket(port);
}


public void connect() throws IOException{
    listener = socket.accept();
}

public String read() throws IOException{

    byte[] temp = new byte[1024];

    int bytesRead = 0;

    try(InputStream input = listener.getInputStream()){
        bytesRead = input.read(temp);
    }

    return new String(temp,0,bytesRead,"ASCII");
}

public void write(String data) throws IOException{
    byte[] temp = new byte[1024];

    try(OutputStream out = listener.getOutputStream()){
        out.write(data.getBytes());
        out.flush();
    }
}

public void close(){
    socket.close();
}

}

客户代码:

public class Client{

Socket client;

InetSocketAddress addr;

public Client(String ip, int port) throws IOException{

    client = new Socket();
    addr = new InetSocketAddress(ip,port);

}


public void connect() throws IOException{
    client.connect(addr);
}

public String read() throws IOException{

    byte[] temp = new byte[1024];

    int bytesRead = 0;

    try(InputStream input = client.getInputStream()){
        bytesRead = input.read(temp);
    }

    return new String(temp,0,bytesRead,"ASCII");
}

public void write(String data) throws IOException{
    byte[] temp = new byte[1024];

    try(OutputStream out = client.getOutputStream()){
        out.write(data.getBytes());
        out.flush();
    }
}

public void close(){
    client.close();
}

}

现在您要做的就是在服务器上调用connect(),然后在客户端上调用connect()并编写和发送所需的消息。

完成后,别忘了打电话给关闭。

还请注意,您将需要某种机制来告知服务器和客户端每条消息将持续多长时间。或者,您可以指定一个结束字符,告诉客户端/服务器消息已结束。

服务器中的一个发送不一定等于客户端中的一个发送,反之亦然。您将必须弄清楚该怎么做。