[英]Server Listening on Multiple Ports [Java]
我試圖弄清楚如何創建一個java程序,它可以監聽多個端口並根據客戶端說話的端口執行不同的操作。
我已經看到並理解了基本的客戶端 - 服務器程序: http : //systembash.com/content/a-simple-java-tcp-server-and-tcp-client/
只是重申一下,我想創建這個相同的關系,但是不是服務器只監聽一個端口並在接收輸入時執行一個動作,我希望它在多個端口上偵聽並根據客戶端連接的端口並將數據發送到,執行不同的操作。
我希望將來每個端口都接受一個GET和PUT命令,但是現在我只想弄清楚如何設置能夠監聽多個端口的服務器的基本結構。 我試過谷歌搜索,但我似乎找不到多少,所以任何幫助都表示贊賞。
提前致謝。 - 安東尼
你提到的教程非常基礎。 如果不使用線程,則無法編寫任何合理的服務器。 為了擁有兩個服務器套接字,您必須為每個端口生成一個新線程,如下所示(偽代碼):
new Thread() {
public void run() {
ServerSocket server = new ServerSocket(6788);
while(true) {
Socket client1 = server.accept();
//handle client1
}
}.start();
和(注意不同的端口):
new Thread() {
public void run() {
ServerSocket server = new ServerSocket(6789);
while(true) {
Socket client1 = server.accept();
//handle client2
}
}.start();
擁有client1
和client2
套接字,您可以單獨處理它們。 此外,處理客戶端連接應該在不同的線程中完成,以便您可以為多個客戶端提供服務。 當然,這段代碼引入了大量重復,但請將此視為一個起點。
總結一下 - 如果您的目標是實現HTTP GET和PUT,請使用servlet並遠離所有這些喧囂。
套接字只能對特定端口開放,因此您需要多個服務器套接字(例如,每個端口1個套接字)。 我認為你還需要每個套接字一個線程,以便一個套接字上的網絡活動不會干擾其他套接字上的活動。
您是否將服務器作為學術練習來實施? 如果沒有,我真的 非常強烈建議使用預先存在的服務器,如Tomcat 。
您當然可以打開多個服務器套接字。
您可能還想查看可以幫助您實現協議的jboss netty。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.