当serverSocket.accept()得到socket后,关掉serverSocket,我自己想的,不知道行不行,
解决方案 »
- 怎样将字符窜输入到特定txt文件中?
- 如何开发Java的控制台程序
- jtable中动态显示的数据怎样自动换行。。急急急
- JTable 列名不显示
- 有问题,我给一个50K的图片加了个水印后她就变成100多K了,有人对BufferedImage熟悉点吗?
- 有关线程的问题
- 简单负值问题
- 一语法问题,不懂,请高手指点!!!!
- where can download emulator(POSE)'s ROMs. Free is better
- 我下了jb6可是没有序列号,请问哪位看官有序列号,千恩万谢
- 一些.JAVA文件,没有包,想用JBUILDER7做成一个PROJECT里,然后生成一个JAR到指定的目录
- 关于prorider的问题
对于增加while循环判断的方式,我试过,造成大量的CPU消耗,因为CPU始终在判断true和false.代码如下:
while(true)
{
if(!connected)
{
socket = socketServer.accept();
connected = true;
大家还有其他招数吗?
ServerSocket sSocket = new ServerSocket(port, 2);
sSocket.setSoTimeout(timeout);
Socket client = null;
while (true) {
try {
client = sSocket.accept();
if (client == null) {
Thread.currentThread().sleep(2 * 1000);
continue;
}
else {
client.setSoTimeout(1000);
//添加至队列
if (checkSocket(client)) {
DealClient(client);
}
else {
Thread.currentThread().sleep(2 * 1000);
client.close();
continue;
}
}
}
catch (Exception ex) {
Thread.currentThread().sleep(2 * 1000);
client = null;
continue;
}
client = null;
Thread.currentThread().sleep(1000);
}
}
控制方法为checkSocket;
自己实现即可
另外请教高手,为什么要设置setSoTimeOut呢?
我读乐API,它的意思是在serversocket在一段时间没有连接连入的时候抛异常,有什么用呢?一段时间没有连接很正常呀,在异常里要做什么处理呢?另外huidaoren(huidaoren),我也试了你的方法,我不明白为什么要将socketServer.setSoTimeout(0),因为缺省应该就是无限等待,不抛异常吧。试后,也不管用,我的服务器照样能应答两个客户端。现在我的代码改成这样:
socketServer = new ServerSocket(tcpPort, 1);
logger.info("SocketServer is running ...");
while(true)
{
socket = socketServer.accept();
//如果已经连上,则断开连接
if(connected)
{
Thread.currentThread().sleep(2 * 1000);
socket.close();
continue;
}
connected = true;
Thread.currentThread().sleep(2 * 1000);
client = null;
continue;
}