【问题标题】:Simple client-server example with java nio使用 java nio 的简单客户端-服务器示例
【发布时间】:2018-11-22 20:54:44
【问题描述】:

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

我不需要服务器一次处理多个客户端,我需要了解的是客户端和服务器之间有多条消息的连接是如何发生的。

【问题讨论】:

    标签: java server client client-server nio


    【解决方案1】:
    【解决方案2】:

    如果您不打算处理多个连接,则不确定为什么需要使用 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(),然后编写和发送您想要的消息。

    完成后不要忘记调用 close。

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

    服务器中的一次发送不一定等于客户端中的一次读取,反之亦然。你将不得不弄清楚该怎么做。

    【讨论】:

      猜你喜欢
      • 2012-08-07
      • 1970-01-01
      • 2011-07-04
      • 1970-01-01
      • 1970-01-01
      • 2021-04-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多