簡體   English   中英

Java套接字編程

[英]Java Socket programming

我在Java套接字編程中有兩個問題。 這將是獨立的應用程序,僅在J2SE中構建。

1)在我的情況下是否可以通過同一端口同時進行讀/寫,因為這將是一個https請求,因此端口將是443。

2)是否可以在一個Java應用程序中創建兩個套接字連接。 其中一個套接字充當客戶端,另一個充當服務器。

我一直在尋找有關此的一些材料,但是我找不到任何有用的東西。

套接字連接是兩種方式,因此您可以在一個連接上進行讀寫。 它類似於連接電線插入插座,因此稱為插座。

這是你的做法

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應用程序,則還需要考慮一個經過正確簽名的數字證書。 如果其Intranet,則用於訪問它的瀏覽器將必須導入一個自行生成的自簽名證書。

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

看看這個教程

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

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

  3. 客戶端不創建僅服務器程序創建的端口。 客戶端僅向該服務器端口上的服務器發送請求。 因此,程序中任意數量的端口始終是服務器端口。

  4. 當客戶端將請求發送到服務器時,服務器將獲得一個放置請求的緩沖存儲器,然后服務器將其讀取。 服務器還獲得了另一個緩沖存儲器,服務器可以在其中寫入發送回客戶端所需的響應。 因此,是的服務器可以同時讀寫。

對於那些仍在尋找進一步解釋的人。 這是使用Java套接字制作的一些簡單游戲示例的鏈接。 我發現分解並使用一些代碼很有幫助。

http://cs.lmu.edu/~ray/notes/javanetexamples/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM