2011-12-21 86 views
1

我在java socket編程中有兩個問題。這將是獨立的應用程序,並將僅在J2SE中構建。Java Socket編程

1)是否有可能的讀/通過相同的端口在我的情況下同時寫,因爲這將是一個HTTPS請求,從而端口將是443

2)是否有可能在一個java的創建兩個套接字連接應用。其中一個套接字充當客戶端,另一個充當服務器。

我一直在尋找一些關於這方面的材料,但我找不到任何有用的東西。

回答

2

對於你的兩個問題,答案是肯定的。對於第二個問題,您需要創建一個線程來偵聽服務器上的活動。

而且看看this tutorial

+3

[這個PDF](http://www.buyya.com/java/Chapter13.pdf)也是一個很好的資源,海事組織。 (只需添加更多的答案):-) – Deco 2011-12-21 00:46:54

4

套接字連接是雙向的,所以你可以閱讀和一個連接寫。它類似於連接一個電線插頭插座,因此名稱插座。

繼承人你怎麼做

Socket socket = new Socket("10.0.0.1", 1234); 
OutputStream os = socket.getOutputStream(); 
InputStream is socket.getInputStream(); 
new MyInputServiceThread(is).start(); 

現在你可以從OS編寫,並從OS讀。如果您希望它們不同步,您可以在相同的線程或不同的線程上執行此操作。

在2上,您可以在一個應用程序中擁有任意數量的客戶端和服務器套接字。至少在理論上。有實際的限制。對於服務器套接字,您可以接受連接,然後生成一個傳遞給打開的套接字的線程,然後您的服務器套接字應該準備好接受更多連接。換句話說,爲了允許同一端口上的多個連接,您應該確保在接受連接後不會阻塞。但是,您也可以在多個線程中打開多個服務器套接字。

下面有一個例子

ServerSocket server = new ServerSocket(1234); 
while (true) { 
    Socket socket = server.accept(); 
    // Once it spawns the thread that socket connection is serviced by 
    //the thread and the   
    //server socket is ready to accept new connections. 
    new Mythread(socket).start(); 
    // above Mythread extends Thread....  
} 

對於應用如客戶端沒有限制。即儘可能多地連接。

另一個說明... 對於https,您還必須接受證書,這意味着您將不得不處理私人公鑰。你真的想這麼做嗎?因爲tomcat和其他應用程序服務器已經這樣做了。如果這將是一個Web應用程序,您還需要考慮一個正確簽名的數字證書。如果其內部網和瀏覽器用於訪問它,則必須導入自己生成的自簽名證書。

+0

正如我前面所述,它不是一個Web應用程序。這將是一個獨立的應用程序。應用程序將使用主要方法啓動。沒有我們的組件參與。所以我想我不需要擔心證書。 – AKV 2011-12-21 02:27:43

+1

即使它不是一個Web服務器,如果你使用SSL,你將需要擔心證書。從你的問題說明https?其中使用http over ssl。 – 2011-12-21 08:25:53

0
  1. 創建端口的程序是服務器程序。

  2. 在服務器程序中,您可以創建多個偵聽客戶端請求的端口。

  3. 客戶端不會創建端口唯一的服務器程序。客戶端只向該服務器端口的服務器發送請求。所以程序中的任意數量的端口都是服務器端口。

  4. 當客戶端向服務器發送請求時,服務器將獲取一個緩衝區內存,請求放置在該緩衝區中,服務器讀取該請求。服務器還可以獲得另一個緩衝區內存,其中服務器可以編寫其需要發送回客戶端的響應。所以,是的,服務器可以同時讀寫。