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