我有一个Java客户端和服务器我试图写Junit测试。在我的测试中,我等待服务器和客户端之间的连接,然后写一条消息到服务器到客户端来测试通信。我发现如果我立即执行写操作,它没有收到,并且客户端在BufferedReader.readLine()方法中保持阻塞状态。如果我在套接字连接和服务器写入调用之间添加一个半秒的睡眠,那么一切都可以正常工作。Java套接字读取未收到连接建立后立即发送写入
我想弄清楚为什么需要睡眠。我知道套接字已经生成,并且在我的waitForConnection()方法返回一个服务器和客户端已连接的报告之前,在其输入流周围封装了一个bufferedReader。我最好的猜测是,我需要确保在服务器调用write方法之前调用客户端的readLine方法;但我认为套接字会自动缓冲输入并且不立即读取?
任何人都可以确认(或反驳)我怀疑我必须保证客户端在服务器调用写入之前调用readline。如果这是必需的,任何人都可以建议一种方法,即服务器可以检测客户端是否准备好接收输入,而不必实施除TCP握手之外的另一次握手?
编辑:我应该早点说这个,但是失败的测试是测试一个能否在旧的失败时重新建立连接。客户端连接后,我的模拟服务器终止socket/serverSocket,几秒钟后重新打开一个新的serverSocket并接受来自客户端的新连接。客户端第二次建立连接后,写入失败。我以前的测试只是测试连接发生,客户端收到写入似乎工作。
感谢
谢谢你的意见,但我已经确保既冲洗和换行正在做。同花顺的东西确实会导致我原来的测试失败,但那个更容易理解。 – user623257 2011-03-16 15:20:27