那位有多余的时间能否帮我看看这个java程序

陪你去看龙卷风

新手上路
VIP
注册
2002-10-12
消息
11,271
荣誉分数
61
声望点数
0
双端口的多线程操作
我原先的想法是
让_ss跟_sl能够同时操作事情,互不干扰
不过现在看来似乎是除非_serverListener的线程被激活,否则_loginListener根本不启动

希望大家能帮个忙:thanks:

代码:
package loginserver;

import java.io.IOException;
import java.net.ServerSocket;

public class Listener
{
	private ServerSocket _ss;
	private ServerSocket _sl;
	
	public void ListenSockets()
	{
		  try{
			  _ss = new ServerSocket(ServerInfo.getPort(), 50, ServerInfo.getBindAddr());
		  } catch (IOException e) {
			    System.out.println("Could not bind on " + ServerInfo.getPort());
			    System.exit(-1);
		  }
		  try{
			  _sl = new ServerSocket(ServerInfo.getServerListRecvPort(), 50, ServerInfo.getServerListRecvBindAddr());
		  } catch (IOException e) {
			    System.out.println("Could not bind on port "+ServerInfo.getServerListRecvPort()+"for server");
			    System.exit(-1);
		  }
		  
		  while(true){
			    LoginListener _loginListener;
			    ServerListener _serverListener;
			    try{
			    	_serverListener = new ServerListener(_sl.accept());
			    	_serverListener.start();
				    _loginListener = new LoginListener(_ss.accept());
				    _loginListener.start();			 
			    } catch (Exception e) {
					System.out.println("err in Listener");
			      System.exit(-1);
			    }
		  }
	}
}
 
最初由 陪你去看龙卷风 发布
双端口的多线程操作
我原先的想法是
让_ss跟_sl能够同时操作事情,互不干扰
不过现在看来似乎是除非_serverListener的线程被激活,否则_loginListener根本不启动

希望大家能帮个忙:thanks:

代码:
package loginserver;

import java.io.IOException;
import java.net.ServerSocket;

public class Listener
{
	private ServerSocket _ss;
	private ServerSocket _sl;
	
	public void ListenSockets()
	{
		  try{
			  _ss = new ServerSocket(ServerInfo.getPort(), 50, ServerInfo.getBindAddr());
		  } catch (IOException e) {
			    System.out.println("Could not bind on " + ServerInfo.getPort());
			    System.exit(-1);
		  }
		  try{
			  _sl = new ServerSocket(ServerInfo.getServerListRecvPort(), 50, ServerInfo.getServerListRecvBindAddr());
		  } catch (IOException e) {
			    System.out.println("Could not bind on port "+ServerInfo.getServerListRecvPort()+"for server");
			    System.exit(-1);
		  }
		  
		  while(true){
			    LoginListener _loginListener;
			    ServerListener _serverListener;
			    try{
			    	_serverListener = new ServerListener(_sl.accept());
			    	_serverListener.start();
				    _loginListener = new LoginListener(_ss.accept());
				    _loginListener.start();			 
			    } catch (Exception e) {
					System.out.println("err in Listener");
			      System.exit(-1);
			    }
		  }
	}
}

I didn't see you create any "thread'. You are running in a single thread. The first accept() block the 2nd one until there is a request to it. make sure you create at least a 2nd thread to run the 2nd accept(). or you might want to find a non-block accept() function to replace it.
 
problem solved, and thx for replying

package loginserver;

import loginserver.clients.ClientListener;
import loginserver.servers.ServerListener;

public class Server
{
public static void main(String[] args)
{
System.out.println("loading the loginserver...");
try
{

ClientListener cl = new ClientListener();
cl.start();

ServerListener sl = new ServerListener();
sl.start();
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
--------------
public class ClientListener extends Thread
{
public void run()
{
while(true){

}
}
}
--------------
public class ServerListener extends Thread
{
public void run()
{
while(true){

}
}
}
 
后退
顶部