場景:
一個)持久連接
b)中管理各服務器 - 客戶機通信單獨
c)中從傳播異常/錯誤
如何運行監聽兩個不同端口的兩個java套接字服務器實例?
我使用試圖服務器套接字收聽者創建了兩個實例防護系統下面的代碼:
SimpleSocketServers.java
public class SimpleSocketServers {
public static void main(String[] args) throws Exception {
int port1 = 9876;
SimpleSocketServer server1 = new SimpleSocketServer(port1);
server1.startAndRunServer();
System.out.println("Servers : server1 Listening on port: " + port1);
int port2 = 9875;
SimpleSocketServer server2 = new SimpleSocketServer(port2);
server2.startAndRunServer();
System.out.println("Servers : server2 Listening on port: " + port2);
}
}
和
SimpleSocketServer.java
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class SimpleSocketServer {
private ServerSocket serverSocket;
private int port;
public SimpleSocketServer(int port) {
this.port = port;
}
public void startAndRunServer() {
try {
System.out.println("Starting Server at port " + port + " ...");
serverSocket = new ServerSocket(port);
System.out.println("Listening for client connection ...");
Socket socket = serverSocket.accept();
RequestHandler requestHandler = new RequestHandler(socket);
requestHandler.start();
} catch (Exception e) {
e.printStackTrace();
}
}
}
class RequestHandler extends Thread {
private Socket socket;
RequestHandler(Socket socket) {
this.socket = socket;
}
@Override
public void run() {
try {
System.out.println("Client Request Response being processed...");
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter out = new PrintWriter(socket.getOutputStream());
} catch (Exception e) {
e.printStackTrace();
}
}
}
但是,它作爲控制不從一審的構造函數返回只創建一個實例。是否有可能重新獲得控制權並同時運行服務器套接字偵聽器的兩個實例? (ps:請原諒我,如果它是錯誤的或瑣碎的!)
當您在兩個端口上運行相同的代碼時,無法隔離客戶端或通信問題。我希望任何有能力的程序員都能夠把這個答案變成代碼。這不是免費的編碼服務。 – EJP
我在想你是否理解你可以通過同一個監聽套接字接受多個連接。這就是所有TCP服務器的工作原理,這就是爲什麼我提到了一個接受循環的原因。 – EJP