我启动Server程序,它只等待客户端30秒。它在第一次迭代中工作正常,并且不会在剩余的迭代中等待。任何建议。
这里
minLinkWt() sets the index.
然而,该计划仍然保持不变。
import java.sql.*;
import java.net.*;
import java.lang.*;
class Democ{
int index,port,min=100;
ServerSocket ss=null;
Socket s=null;
void begin(){
int av=0;boolean b=false;
minLinkWt();
while(!b){
av=checkStatus(index);
if(av==1){b=true;}
}
if(av==1)
Connect();
else
System.out.println("No Routers Available");
}
void Connect()
{
System.out.println("Enter the Message to send to clients::");
try{
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
String msg=br.readLine();
PrintStream ps=new PrintStream(s.getOutputStream());
ps.println(msg);
}catch(Exception e){e.printStackTrace();}
}
void callSwitch(int index_formal)
{
switch(index_formal)
{
case 1:
port=2000;
break;
case 2:
port=2001;
break;
case 3:
port=2002;
break;
case 4:
port=2003;
break;
default:
System.out.println("No Routers in Available");
}
}
int checkStatus(int index_formal){
try
{
ss=new ServerSocket(port);
ss.setSoTimeout(30000);
s=ss.accept();
}catch(InterruptedIOException e){
System.out.println("Cannot connect through Router1 Waiting for Router2");}
catch(Exception g){g.printStackTrace();}
if(s==null)
return 0;
else
return 1;
}
class DemoCopy{
public static void main(String s[])
{
Democ obj=new Democ();
obj.begin();
}
}
所以在每次迭代时,服务器必须等待客户端,但不等待。 我得到输出
hello
hello
hello
hello
min is6
AT index2
Cannot connect through Router1 Waiting for Router2
No Routers Available
答案 0 :(得分:0)
看起来begin()中的“index”可以是数组的索引,因此您要检查服务器套接字端口的状态,从0到x或者其他什么。
可能你应该发布更多的源代码,但看起来你在checkStatus()中使用单个端口值,这意味着ServerSocket每次都绑定相同的端口。
在第一次迭代时没关系,因为服务器套接字没有绑定到任何端口,但是在第一次迭代结束时你根本没有关闭服务器套接字。
因此服务器套接字仍然绑定在给定端口,并且创建具有相同端口号的新ServerSocket将失败,因为它已经绑定,除非先关闭它,否则不能再绑定它。
您应该使用单个ServerSocket,并且一旦serverSocket.accept()返回套接字,您就可以将其存储到数组并经常检查它的状态。或者也许你可以每次区分端口号,让客户端每次连接不同的端口也可以工作,但我不认为这是你想要做的。