披露:我正在处理的代码是大学课程.
背景:我要完成的任务是报告不同线程技术的效果.为此,我编写了几个类来响应客户端使用Java套接字的请求.我们的想法是向服务器发送请求并报告不同的线程策略如何处理这个问题.每个客户端将发出100个请求,并且在每次迭代中,我们将客户端数量增加50,直到出现故障.
问题:可重复且一致地发生异常:
Caused by: java.net.NoRouteToHostException: Cannot assign requested address
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)
这种情况发生在几种情况下,包括客户端和服务器都在localhost上运行时.可以成功连接一段时间,尝试连接150个客户端后不久就会抛出异常.
我的第一个想法是它可能是Linux对打开文件描述符(1024)的限制,但我不这么认为.我还检查了套接字之间的任何和所有连接是否正确关闭(即在正确的finally块内).
我对发布代码犹豫不决,因为我不确定哪些部分最相关,并且不希望在问题中有大量代码.
有没有人遇到过这个?如何避免NoRouteToHostException?
编辑(进一步的问题是斜体)
到目前为止,一些好的答案指向短暂的端口范围或RFC 2780.这两个都表明我有太多的连接打开.对于两者而言,似乎需要达到此限制的连接数表明在某些时候我没有关闭连接.
调试了客户端和服务器后,两者都被观察到了方法调用myJava-Net-SocketInstance.close().这表明连接正在关闭(至少在非例外情况下).这是正确的建议吗?
此外,是否还需要等待操作系统级别才能再次使用端口?如果在运行下一次尝试之前只需要短时间(或乐观地运行命令),则可以为每个50多个客户端单独运行程序.
编辑v2.0
在提供了良好的答案后,我修改了我的代码,使用方法setReuseAddress(true)与客户端上的每个Socket连接.这没有达到预期的效果,我仍然限制在250-300个客户端.程序终止后,运行该命令会netstat -a显示TIME_WAIT状态中存在大量套接字连接.
我的假设是,如果套接字处于TIME-WAIT状态,并且已使用该SO-REUSEADDR选项设置,则任何尝试使用该端口的新套接字都能够 - 但是,我仍然收到NoRouteToHostException.
它是否正确? 还有什么办法可以解决这个问题吗?
我一直在努力解决这个问题.找到几篇关于它的帖子但没有解决我的问题.它可能与SecurityContext对特定线程有关的事实有关,但即便如此我也不知道如何解决它:
请考虑使用以下代码来检索已登录的用户:
SecurityContextHolder.getContext().getAuthentication().getPrincipal()
Run Code Online (Sandbox Code Playgroud)
在控制器中运行此代码将返回(正确)登录的用户.从taglib或jsp运行此代码会抛出NPE(authentication = null).还有弹簧标签 不起作用(大概是出于同样的原因).
从web.xml中提取:
<filter>
<filter-name>AcegiFilter</filter-name>
<filter-class>org.acegisecurity.util.FilterToBeanProxy</filter-class>
<init-param>
<param-name>targetClass</param-name>
<param-value>org.acegisecurity.util.FilterChainProxy</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>AcegiFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
Run Code Online (Sandbox Code Playgroud)
从spring安全配置文件中提取:
<bean id="filterChainProxy" class="org.springframework.security.util.FilterChainProxy">
<property name="filterInvocationDefinitionSource">
<value>
CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON
PATTERN_TYPE_APACHE_ANT
/**=httpSessionIntegrationFilter,authenticationProcessingFilter,exceptionTranslationFilter,filterSecurityInterceptor
</value>
</property>
</bean>
<bean id="filterSecurityInterceptor"
class="org.springframework.security.intercept.web.FilterSecurityInterceptor">
<property name="authenticationManager" ref="authenticationManager" />
<property name="accessDecisionManager" ref="accessDecisionManager" />
<property name="alwaysReauthenticate" value="true" />
<property name="objectDefinitionSource">
<value>
CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON
PATTERN_TYPE_APACHE_ANT
/myaccount.htm=ROLE_CUSTOMER
</value>
</property>
</bean>
Run Code Online (Sandbox Code Playgroud) 我没有 - as或者is在C#或任何支持该关键字的语言中使用过.
你用它做什么用的?
我不是说我如何使用它我的意思是你真的需要它?
我还在一个相当大的c ++项目中没有进行类型转换(我很自豪).
所以考虑到我几乎从不打字,为什么我需要关键字as或is?
我试图用一些数据绑定一个组合框.问题是我在组合框中有这样的数据:
<ComboBox>
<ComboBoxItem>Item 1</ComboBoxItem>
<ComboBoxItem>Item 2</ComboBoxItem>
<ComboBoxItem>Item 3</ComboBoxItem>
<ComboBoxItem>Item 4</ComboBoxItem>
<ComboBoxItem>Item 5</ComboBoxItem>
</ComboBox>
Run Code Online (Sandbox Code Playgroud)
当加载组合框的表单时,我有一个加载的资源,它有一个int,我想将它绑定到这个组合框.因此,如果该int为1,我希望组合框显示项目1等,当我更改组合框的项目时,我想相应地更新该int.
有没有办法将此资源绑定到组合框以实现?
先感谢您
我需要在比特流中扫描16位字.不保证在字节或字边界上对齐.
实现这一目标的最快方法是什么?有各种蛮力方法; 使用表和/或移位,但是有没有"bit twiddling shortcuts"可以通过给出yes/no /也可以包含每个字节或单词到达时的标志结果来减少计算次数?
C代码,内在函数,x86机器代码都很有趣.
据我所知,"不能排序大小为9754的行,这大于允许的最大值8094".来自SQL Server的是由一行中有超过9k个字符的行引起的,这个行大于SQL Server 7中的页面大小限制.但是我没有通过下面的数据调用一个命令,所以为什么错误说它不能排序?
SELECT <a number of columns...>
FROM Category10Master c10
JOIN Category20Master c20 ON c10.Cat10ID = c20.ParentCatID
JOIN Category25Master c25 ON c20.Cat20ID = c25.ParentCatID
JOIN Category30Master c30 ON c25.Cat25ID = c30 .ParentCatID
JOIN Item i ON c30.Cat30ID = i.ParentCatID
Run Code Online (Sandbox Code Playgroud)
编辑:是的,我知道我可以调用更少的列来解决这个问题 - 实际的查询显式调用所需的列,但仍超过行大小限制.这实际上是在一个被称为站点范围的视图中,因此更改视图以缩回更少的列不是一个有吸引力的选项 - 需要修改数十个页面以从视图以外的其他位置获取数据.我不幸的是已经把一个丑陋的设计搞得一团糟,我希望有人能提供比吸引更少数据更有吸引力的解决方案.
我正在尝试这段代码:
interface Callee {
public void foo(Object o);
public void foo(String s);
public void foo(Integer i);
}
class CalleeImpl implements Callee
public void foo(Object o) {
logger.debug("foo(Object o)");
}
public void foo(String s) {
logger.debug("foo(\"" + s + "\")");
}
public void foo(Integer i) {
logger.debug("foo(" + i + ")");
}
}
Callee callee = new CalleeImpl();
Object i = new Integer(12);
Object s = "foobar";
Object o = new Object();
callee.foo(i);
callee.foo(s);
callee.foo(o);
Run Code Online (Sandbox Code Playgroud)
这打印foo(Object o)三次.我希望方法选择考虑到真实的(不是声明的)参数类型.我错过了什么吗?有没有办法修改这个代码,以便打印foo(12), …
你根本无法<location path="." inheritInChildApplications="false">在你的web.config的某些部分使用它,以告诉它忽略某些部分的继承(你会得到错误,例如'inheritInChildApplications属性未被声明',所以如果你尝试把它放在它的部分,那么第四不支持).
例如,您不能在之前或之内使用它<configSections>.例如,您可以将<system.web>标记包装在位置标记中,但我需要停止继承任何内容,<configSections>并且我没有看到这样做的方法.
我的子应用程序继承了我父应用程序的Web配置在树中的IIS 7中具有的一些相同的配置设置.我认为无法<clear/>在configSecion标记中放置任何一个,因为如果您尝试将其添加到无效标记中,则它是无效标记.
你怎么告诉它忽略那一节?
我想验证一个不接受使用正则表达式的任何特殊字符的文本框.它只需要从0到9的字母和数字.请提供正确的正则表达式.
我设法让我的第一个数组工作,但无论我尝试多少代码示例我都无法单步执行每个数组行并将三个列/元素回显到一个
.我的数组的var_dump是: -
array(27) { [3]=> array(3) { ["id"]=> string(3) "295" ["title"]=> string(24) "ask.sqlservercentral.com" ["questions"]=> int(57) } [4]=> array(3) { ["id"]=> string(3) "287" ["title"]=> string(36) "LensFail.com - Photography Questions" ["questions"]=> int(42) } [2]=> array(3) { ["id"]=> string(3) "437" ["title"]=> string(12) "VideoWTF.com" ["questions"]=> int(37) } [13]=> array(3) { ["id"]=> string(2) "92" ["title"]=> string(8) "Moms4Mom" ["questions"]=> int(36) } [9]=>
Run Code Online (Sandbox Code Playgroud)
我试过使用这个,但我没有得到预期的结果: -
foreach($results as $key=>$value)
{
echo $key.": ".$value;
}
Run Code Online (Sandbox Code Playgroud)
有人可以帮助一个代码示例循环数组和回声ID,标题,问题到一个
在此之前感谢您的帮助.
乔纳森