如何模拟一个传出的Socket连接?

11

在集成测试(JDK 6)中,我试图捕获所有的出站TCP连接并进行模拟。看起来我应该使用java.net.Socket#setSocketImplFactory() 方法。目前可以正常工作,但是我不知道如何获取原始工厂的访问权限,以便实例化原始的JDK提供的SocketImpl类。我需要这个主要是因为我希望一些连接能够自由地发送,而不进行模拟。您能否提供有关此问题的一些手册/指南/说明书?


这个问题与以下内容相关:https://dev59.com/u0vSa4cB1Zd3GeqPd2LW - yegor256
相关链接:https://dev59.com/aXE95IYBdhLWcg3wkeof - Rich
3个回答

2

与其嘲笑Socket,不如为Socket创建一个Socket服务。这样可以捕获所有写入的数据,并以任何你希望的方式进行回复。它可以在同一测试中运行,可能在同一线程中运行。


0

你说得没错,但我在谈论的是 SocketImplFactory,它生成 SocketImpl 类的实例。java.net.Socket 类与这一切无关。 - yegor256

0

查看Socket类的源代码,没有原始工厂 - 构造函数检查factory是否为空,如果是,则将impl分配为新的PlainSocketImpl()


据我所知,“Socket类的源代码”并不存在。每个JDK都有自己的源代码,这些源代码可能因实现而异。 - yegor256
也许我太天真了,但我假设你正在使用Oracle JDK 6,在这种情况下有特定的源代码可以查看 - 我这样做并用它来解释没有原始工厂可用于get()。如果您能够这样做,我同意@Peter Lawrey的观点,使用服务是最佳方法。我不得不对Runtime.getRuntime()做同样的事情。https://dev59.com/aXE95IYBdhLWcg3wkeof - Rich
这是我的应用程序中的第三方库,它正在使用套接字。我无论如何都不能更改它。 - yegor256

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接