import java.io.IOException;
import java.net.Socket;public class SocketTest {
public static void main(String[] args) {
for (int i = 0; i < 9999; ++i) {
try {
Socket socket = new Socket("127.0.0.1", 21);
socket.close();
} catch (IOException ioe) {
System.out.println("Error: " + i);
break;
} catch (Exception e) {
System.out.println("Other Exception: " + i);
return;
}
}
System.out.println("End");
}
}
不停的向某个端口发起连接,当达到一定数量的时候,就会连接不上,netstat -a 里面发现端口已经满了。我觉得是windows在哪个地方限制了连接端口的数量,或者socket端口释放得太慢。哪位大虾知道,Win2000上,这种问题该怎么解决?
import java.net.Socket;public class SocketTest {
public static void main(String[] args) {
for (int i = 0; i < 9999; ++i) {
try {
Socket socket = new Socket("127.0.0.1", 21);
socket.close();
} catch (IOException ioe) {
System.out.println("Error: " + i);
break;
} catch (Exception e) {
System.out.println("Other Exception: " + i);
return;
}
}
System.out.println("End");
}
}
不停的向某个端口发起连接,当达到一定数量的时候,就会连接不上,netstat -a 里面发现端口已经满了。我觉得是windows在哪个地方限制了连接端口的数量,或者socket端口释放得太慢。哪位大虾知道,Win2000上,这种问题该怎么解决?
解决方案 »
- java中的私有方法的应用除了单例设计模数外,还有别的吗
- 一个小问题,大家来帮忙,谢谢
- Re:数字问题
- xp下面JDK的设置,在线等。。。。。 很急,,,,,,,,,,
- ※请教关于线程Thread的问题 ?
- 求助用户登陆的程序(连接数据库)
- 为什么不能向XML文件中的空结点中添加子结点?
- 救命。。。现在有两台机器一台是中文操作系统一台是日文操作系统
- javaBean中的property="*"代表什么意思?
- 用InstallAnywhere3.5 打包的安装程序,安装成功后,运行其可执行文件报错,见内~~请问原因,解决30分~!
- 急!在线等!!!关于整数的格式化~请教各位大侠
- 在SWING中怎么调用保存文件和打开文件的对话框?有没有?
但是,这个程序的结果,每当达到3900多次的时候,就会失败,肯定到不了4000次。请问,windows中是否还有其他的限制?to believefym(暮色,miss,迷失,miss) :我们这里有一个批量处理系统,要一次性的发送大量消息到服务器,而且,我们没有源代码,没办法改。所以,请问有没有其他的途径?to TinyJimmy(Jimmy): 请问,连接的状态是不是指listening,waiting等等?这个状态是由程序控制的还是windows控制的?有办法改变它的状态吗?
但是,这个程序的结果,每当达到3900多次的时候,就会失败,肯定到不了4000次。请问,windows中是否还有其他的限制?
======
可能是操作系统打开句柄数或Buffer的限制, 也可能是并发线程总数的限制to TinyJimmy(Jimmy): 请问,连接的状态是不是指listening,waiting等等?这个状态是由程序控制的还是windows控制的?有办法改变它的状态吗?
======
是的, 程序不能直接控制, 都在socket底层
可能是操作系统打开句柄数或Buffer的限制, 也可能是并发线程总数的限制
====
请问这种控制,在windows中可以进行设置吗?可以修改吗?
如果调优很耗时也很艰巨,费用又紧张的话,还可以通过以下调整系统内核参数获得一定的改善。
window nt系列
在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters下增加双字节值的注册表项:
1)MaxUserPort
缺省是5000 (十进制)
可以设置为最大65534 (十进制)
2)TcpTimedWaitDelay
缺省是240 (十进制)
可以设置为最大30 (十进制)unix/linux
echo 65536 > /proc/sys/fs/file-max
ulimit -n 65536
此外在unix/linux的平台下,如果你选用的是FreeBSD的话,那就更加运气一下,可以通过
echo net.inet.tcp.msl=2000 >> /etc/sysctl.conf
/etc/rc.d/sysctl restart
来调整TIME_WAIT连接的超时,缺省为30000
而且个人感觉windows的文件系统确实做得比linux要好,我原来在做review的时候发现我们的程序员在一个发送线程中没有使用client socket的close,windows下使用还是没有大碍的;而同样的代码移植到linux下我们的应用连3分钟都撑不到。呵呵。
请问,您知道在windows2000中如何设置句柄或者是文件描述符(打开文件的数量限制)吗?
“总数”中看到
“句柄数” ——似乎足够大
“线程数”
“进程数”但是至于“句柄数”到底有多大的限制,我目前没有明确。
如果有的话,你把出错信息发给我看看。嘻嘻
--如果您遇到打开文件过多的异常,您面临的可能是操作系统资源缺乏问题。本文将讲述如何解决这个问题。
参考
http://dev2dev.bea.com.cn/techdoc/20050060103.html
不过我居然在msdn里也没有找到微软关于最大文件句柄的描述,应该是我还没有找到,我相信微软的帮助里肯定有的。呵呵