Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.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_Nio - Fatal编程技术网

Java套接字服务器客户端双向聊天程序未获得预期结果

Java套接字服务器客户端双向聊天程序未获得预期结果,java,sockets,nio,Java,Sockets,Nio,我是JavaNIO新手,我正在使用NIO2编写一个简单的服务器-客户机双向通信程序。服务器和客户端正在本地运行。我无法得到我期望的结果,有人能帮我检查一下代码吗?非常感谢 服务器端: public class Server { public static void main( String[] args ) { try (AsynchronousServerSocketChannel server = AsynchronousServerSocketChanne

我是JavaNIO新手,我正在使用NIO2编写一个简单的服务器-客户机双向通信程序。服务器和客户端正在本地运行。我无法得到我期望的结果,有人能帮我检查一下代码吗?非常感谢

服务器端:

public class Server 
{
    public static void main( String[] args )
    {
        try (AsynchronousServerSocketChannel server = AsynchronousServerSocketChannel.open()) {

            server.bind(new InetSocketAddress("127.0.0.1", 2001));
            Future<AsynchronousSocketChannel> acceptCon = server.accept();
            AsynchronousSocketChannel client = acceptCon.get(20, TimeUnit.SECONDS);

            if ((client != null) && (client.isOpen())) {
                Thread.sleep(50); // *** if I do not sleep 50 milsec here, I will get empty string
                ByteBuffer buffer = ByteBuffer.allocate(1024);
                Future<Integer> readval = client.read(buffer);
                String msg = new String(buffer.array()).trim();
                System.out.println("Received from client: " + msg);

                readval.get();
                buffer.flip();
                String str = "I am fine! Thanks.";

                Future<Integer> writeVal = client.write(ByteBuffer.wrap(str.getBytes()));
                System.out.println("Writing back to client: " + str);
                writeVal.get();
                buffer.clear();
            }
            client.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
客户:

Writing to server: Hello! How are you?
Received from server: I am fine! Thanks.
Writing to server: Hello! How are you?
Received from server: I am fine! Thanks.(If do not use sleep, empty string here)
但是,我得到了:

Received from client: Hello! How are you? | (If do not use sleep, it is empty string here)
Writing back to client: I am fine! Thanks.
客户:

Writing to server: Hello! How are you?
Received from server: I am fine! Thanks.
Writing to server: Hello! How are you?
Received from server: I am fine! Thanks.(If do not use sleep, empty string here)
我的问题是: 1.我使用的是Eclipse,当我通过断点调试服务器和客户机项目时,我得到了预期的结果。但是,当我在客户端运行服务器和客户端时,如果我不使用Thread.sleep(100),它将显示“Received from server:”的空字符串,为什么? 2.对于服务器端,如果我在50毫秒内没有睡眠,大多数情况下,“Received from client:”的输出也将是空字符串,有什么提示吗

非常感谢你们的帮助。

客户端。读取(缓冲区)是一个异步操作。future上的
get
调用确保操作已成功完成

ByteBuffer buffer = ByteBuffer.allocate(1024);
Future<Integer> readval = client.read(buffer);
readval.get();
String msg = new String(buffer.array()).trim();
System.out.println("Received from client: " + msg);
ByteBuffer buffer=ByteBuffer.allocate(1024);
Future readval=client.read(缓冲区);
readval.get();
String msg=新字符串(buffer.array()).trim();
System.out.println(“从客户处收到:+msg”);