Java.net.SocketException:无效参数:在Map驱动器中创建

nhjlsmyf  于 2023-06-04  发布在  Java
关注(0)|答案(2)|浏览(205)

我创建了一个Java应用程序,它向另一个服务器发送HTTP POST请求。

  • 服务器中的防火墙已关闭。
  • PC中的防火墙已关闭。

该应用程序在C驱动器中的PC上完美工作。
该应用程序在带有本地Map驱动器的PC上完美工作。
但是,当我把我的应用程序放在网络Map驱动器中时,我得到一个错误:
java.net.SocketException:无效参数:在Map驱动器中创建
这是我的代码:

HttpClient httpClient = HttpClientBuilder.create().build();
HttpPost postRequest = new HttpPost(getUrl());
postRequest.setHeader(AUTHERIZTION, getAuthString());

HttpResponse response = httpClient.execute(postRequest);

这是完整的错误:

java.net.SocketException: Invalid argument: create
    at java.net.Socket.createImpl(Unknown Source)
    at java.net.Socket.getImpl(Unknown Source)
    at java.net.Socket.setSoTimeout(Unknown Source)
    at org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:119)
    at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:353)
    at org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:380)
    at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:236)
    at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:184)
    at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:88)
    at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:110)
    at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:184)
    at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:82)
    at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:107)
    at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:55)
    at rest.RestClient.postGetQuery(RestClient.java:105)
    at frame.ScanJFrame.initProperty(ScanJFrame.java:195)
    at Main.runAction(Main.java:63)
    at Main.main(Main.java:21)

我试过这个:

setx _JAVA_OPTIONS -Djava.net.preferIPv4Stack=true

但是,一切都没有改变。
我该怎么办?

bq3bfh9z

bq3bfh9z1#

冒险猜测,服务器没有绑定到端口以监听网络外部机器连接,无论是在它自己的配置文件中,还是在外部调用PC正在使用的操作系统配置“网络设置”中的机器端口,并且使用http,它应该只是一个域http url。

  • 我最好还指出,jdk或jre在它们的/bin目录中有一个“jconsole”程序,可以用来为运行调用方JVM的二进制文件设置网络连接。这似乎是问题所在,您的java客户端程序需要绑定到另一台机器的端口才能连接到它。

如果从另一台计算机调用文件,请使用Map驱动器语法“file://"+"//servername/afolder/file.txt”此方案适用于Map驱动器的url。

dly7yett

dly7yett2#

从网络Map驱动器运行应用程序时,可能会遇到“java.NET.SocketException:无效参数:创建“错误”或其他类似问题。由于与网络驱动器相关的某些限制或配置,可能会出现此问题。
此错误的一个可能原因是Java的安全设置中默认情况下对从网络驱动器执行文件的限制。默认情况下,Java将网络驱动器视为潜在的不可信位置,并且可能会限制某些操作。
要解决此问题,您可以尝试以下步骤:
1.调整Java安全设置:修改Java安全设置以允许从网络驱动器执行文件。您可以通过转到Java控制面板,导航到“安全”选项卡,并将网络驱动器路径添加到“异常站点列表”来完成此操作。这将告诉Java信任从该位置执行的文件。请记住,修改安全设置应谨慎进行,因为它也可能对其他应用程序产生影响。
1.将应用程序复制到本地驱动器:如果可能,请考虑将应用程序从网络Map驱动器复制到将执行该应用程序的计算机上的本地驱动器。从本地驱动器运行应用程序可消除与网络驱动器限制相关的任何潜在问题。
1.使用UNC路径:您可以尝试在代码中直接使用UNC(统一命名约定)路径,而不是Map网络驱动器。UNC路径使用网络共享名访问文件,而不是Map驱动器号。这种方法可以绕过对网络驱动器Map施加的任何限制。使用UNC路径而不是Map的驱动器,
public void run(){
返回“\server\share\path\to\resource”;
}
1.检查网络驱动器可访问性:确保网络驱动器可访问,并且运行应用程序的用户具有读取/写入该驱动器的必要权限。如果网络驱动器的连接或权限存在任何问题,则在尝试访问文件或资源时可能会导致错误。
通过应用这些建议,您应该能够克服“java.NET.SocketException:无效参数:从网络Map驱动器运行应用程序时出现“create”错误。

相关问题