簡體   English   中英

如何使用SocketServer與Java中的客戶端開始通信?

[英]How can I use a SocketServer to start a communication with a Client in Java?

首先,我對使用Socket通信很陌生,所以還有一些我不知道的事情。 我了解Java中Socket通信的基礎知識,因此我在這里尋求指導。

現在,關於我的問題,我將需要與遠程應用程序建立服務器套接字通信。 在我的應用程序中,我將運行serverSocket,另一個應用程序上的客戶端將與我進行通信。 為此通信實現的協議的一部分是,必須一直打開此套接字,這為我們提供了兩個應用程序之間永久的通信通道。

到目前為止,還沒有什么疏遠。 問題是我將需要使用mi serverSocket來啟動與客戶端的對話。 這意味着我的serverSocket將需要向客戶端發送一些信息,而無需客戶端請求。

對於定義,我理解serverSockets是等待客戶端打開與它們的連接的線程,一旦建立了此連接,應用程序之間的對話通常以客戶端發出的一些請求(即ENQ字符)開始,以開始信息交換; 這是針對已實施某些協議以驗證,發送和接收數據的情況。 否則,信息將由客戶端發送,而無需進行大量驗證和控制。

在正常情況下,如果mi應用程序可以使用Client來與遠程應用程序上的serverSocket通信,則會以更自然的方式處理我的問題。 但這種情況並非如此。 遠程應用程序不能有serverSocket,而只能有一個Client(不要問我為什么,這是業務合作伙伴的應用程序,不是我自己的,並且目前他們不願意更改其通信方案)。

考慮到這一點,我的問題是:有一種方法可以使我正在運行和等待的serverSocket在我的應用程序中的某個進程需要時將一些信息從應用程序發送到遠程客戶端。 我如何從應用程序中的第三個bean調用serverSocket中的打開套接字來寫呢?

聽起來您正在尋找的是UDP套接字。

看一下DatagramSocket類。

問題是我將需要使用mi serverSocket來啟動與客戶端的對話。 這意味着我的serverSocket將需要向客戶端發送一些信息,而無需客戶端請求。

那甚至沒有意義。 ServerSocket的整體思想是由客戶端啟動連接。 而且ServerSockets無法發送數據。

您需要整理您的要求:如前所述,這沒有道理。

ServerSocket將等待來自其他設備的TCP連接。 建立連接后,對ServerSocket.accept()的調用將返回連接到遠程系統的新Socket

建立連接后, 服務器客戶端之間的區別是任意的。 沒有要求誰必須首先發送。 這完全取決於您要實現的協議。

暫無
暫無

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

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