我正在構建一個Java應用程序,它可以同時偵聽2個端口,並且還能夠執行多線程。 我如何做到這一點如下。我在PortApp.java中有一個非常基本的圖形用戶界面,它通過2個文本框輸入2個整數,並且還有一個監聽按鈕。所以當點擊監聽按鈕時,下面的代碼被執行。Java套接字線程問題
jTextField1.disable();
jTextField2.disable();
int port = Integer.valueOf(jTextField1.getText());
int port1 =Integer.valueOf(jTextField2.getText());
int count = 0;
try{
foo(port,port1);
while (true) {
//Socket connection = socket1.accept();
thread.start();
thread1.start();
}
}
catch (Exception e) {}
而且方法foo()是如下
public void foo(int a, int b){ //function to get the port numbers as integers and to declare 2 sockets for the ports.
int port=a;
int port1=b;
int count=0;
try {
socket1 = new ServerSocket(port);
} catch (IOException ex) {
}
try {
socket2 = new ServerSocket(port1);
} catch (IOException ex) {
}
//System.out.println("MultipleSocketServer Initialized");
Runnable runnable = new MultipleSocketServer(socket1, ++count);
Runnable run = new MultipleSocketServer(socket2, ++count);
thread = new Thread(runnable);
thread1 = new Thread(run);
}
其中SOCKET1和SOCKET2是ServerSocket的實例。 控制然後轉移到另一個類的MultipleSocketServer,一旦套接字建立,它就會讓另一個後端工作。
的運行MultipleSocketServer類的()如下
public void run() {
while(true){
try {
Socket incoming=connection.accept();
BufferedInputStream is = new BufferedInputStream(incoming.getInputStream());
int character;
while((character = is.read())!=-1) {
//DO SOMETHING
}
incoming.close();
SYstem.out.println("Client DC'ed");
//CONTINUE WITH OTHER EXECUTIONS
}
和MultipleSocketServer構造是
MultipleSocketServer(ServerSocket s, int i) {
this.connection = s;
this.ID = i;
}
現在上述聽者代碼不同時支持多個客戶端。我認爲它會並且應該打印'cient DC'ed提示信息','同時連接到同一端口'的客戶端中的任何一個斷開連接,但是這似乎沒有發生,它不打印出提示符,直到最後一個客戶端連接到該端口實例,一旦該客戶端斷開連接,它就會打印出所有客戶端的提示信息。實質上,即使任何特定的客戶端斷開連接,與該客戶端對應的propmt消息也不會被打印,直到最後一個客戶端斷開,從而使套接字「空閒」。 任何關於如何解決這個問題的指針以及如何在任何同時連接的客戶端斷開連接而不等待它們全部斷開的情況下打印出提示將非常有幫助。
僅供參考,我使用多個超級終端實例模擬上述環境。
CHEERS