在集成测试(JDK 6)中,我试图捕获所有传出的TCP连接并模拟它们。看起来我应该使用java.net.Socket#setSocketImplFactory()
方法。目前工作正常,但我无法理解如何才能访问原始工厂,以实例化原始JDK提供的SocketImpl
类。我主要需要这个,因为我想让一些连接自由出去,而不是嘲弄。你能提出一些关于这个问题的手册/指导方针/指导吗?如何模拟传出的Socket连接?
回答
根据javadoc,您应该可以使用SocketFactory#getDefault()来获取适用于您的环境的默认SocketFactory。
BTW:您可能也想看看这个RFE /错误,这宣告SocketImplFactory基本上是一个死胡同:http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4245730
你说得对,但我正在谈论'SocketImplFactory',它会生成'SocketImpl'类的实例。类java.net.Socket没有任何关系。 – yegor256 2011-12-19 15:42:15
纵观Socket类的源代码,也没有原厂 - 中构造函数检查factory
是否为空,如果是,则只需将impl
分配为新的PlainSocketImpl()
。
据我了解,没有“Socket类的源代码”这样的东西。每个JDK都有自己的源代码,这可能因实现而异。 – yegor256 2011-12-19 15:37:45
也许这对我来说太天真了,但我认为你使用的是Oracle JDK 6,在这种情况下有特定的资源可以查看 - 我这样做并用它来解释没有原始工厂可以获得()。如果你能做到这一点,我同意@Peter Lawrey认为使用服务是最好的方法。我必须使用Runtime.getRuntime()完成相同的操作。 http://stackoverflow.com/questions/2257901 – Rich 2011-12-20 08:01:36
这是我的应用程序内的第三方库,即使用套接字。无论如何我无法改变它。 – yegor256 2011-12-20 08:03:44
而不是嘲笑一个套接字我会创建一个套接字服务的Socket来交谈。这可以捕获所有写入数据并以您希望的任何方式进行回复。它可以在相同的测试中运行,并且可能在同一个线程中运行。
- 1. 如何模拟sql连接?
- 2. 如何实现Socket连接
- 3. 使用Android模拟器时,Mac狮子无法连接到Socket
- 4. Socket连接
- 5. Socket连接
- 6. Android Socket连接
- 7. Socket连接Windows
- 8. 模拟jndi连接
- 9. 如何模拟黄瓜TCP连接
- 10. 如何让Sinatra模拟拒绝连接?
- 11. 如何在JUNIT中模拟WiFi连接?
- 12. 如何连接穿戴模拟器和电话模拟器?
- 13. 无线连接在Android的Socket连接
- 14. SSL Socket连接iOS
- 15. 最大Socket连接
- 16. flup和socket连接
- 17. ZeroMQ,如何连接到外部tcp socket?
- 18. 如何从vbscript连接到Socket
- 19. 如何在Android中创建Socket连接?
- 20. 使用spring连接mysql,如何模拟连接池?
- 21. C++的Socket连接错误
- 22. 的C++ socket连接错误
- 23. Android的Socket连接失败
- 24. unix socket上的连接数
- 25. 与coldfusion的socket连接
- 26. 如何在linux中模拟socket/tcp编程的异常情况,比如终止连接的一端?
- 27. Tizen模拟器UDP连接
- 28. 模拟连接错误
- 29. 模拟播放JDBC连接
- 30. 模拟多个socket.io连接
此问题是相关的:http://stackoverflow.com/questions/2083647/writing-a-java-net-socketimplfactory – yegor256 2011-12-19 15:47:29
也相关:http://stackoverflow.com/questions/2257901/mock-runtime-getruntime – Rich 2011-12-20 08:02:36