我希望能夠通過網絡發送簡單的消息。任何消息。如何通過網絡發送消息?
具體來說,我想要一臺運行時間一直很長的服務器,以及一臺可以連接到服務器並按需與服務器通信的客戶端。
我不知道從哪裏開始。通過網絡發送消息的最簡單方法是什麼?
我希望能夠通過網絡發送簡單的消息。任何消息。如何通過網絡發送消息?
具體來說,我想要一臺運行時間一直很長的服務器,以及一臺可以連接到服務器並按需與服務器通信的客戶端。
我不知道從哪裏開始。通過網絡發送消息的最簡單方法是什麼?
本教程Reading from and Writing to a Socket開始,你可以用它採用了ServerSocket像這樣
public static void main(String[] args) throws Exception {
// create socket
int port = 4444;
ServerSocket serverSocket = new ServerSocket(port);
System.err.println("Started server on port " + port);
// repeatedly wait for connections, and process
while (true) {
// a "blocking" call which waits until a connection is requested
Socket clientSocket = serverSocket.accept();
System.err.println("Accepted connection from client");
// open up IO streams
BufferedReader in = new BufferedReader(new InputStreamReader(
clientSocket.getInputStream()));
PrintWriter out = new PrintWriter(clientSocket.getOutputStream());
// waits for data and reads it in until connection dies
// readLine() blocks until the server receives a new line from
// client
String s;
try {
while ((s = in.readLine()) != null) {
out.println(s);
out.flush();
}
} catch (Exception e) {
e.printStackTrace();
}
// close IO streams, then socket
System.err.println("Closing connection with client");
out.close();
in.close();
clientSocket.close();
}
然後你可以使用「遠程登錄本地主機4444」,以測試它,或者寫一個完整的客戶端簡單echo server啓動;也許就像上面教程中的客戶端一樣。
現在我該如何讓客戶接洽? XD – user3170707
@ user3170707 [Here](http://docs.oracle.com/javase/tutorial/networking/sockets/examples/EchoClient.java)。 –
好的,這個問題真的很開放。首先有幾個問題需要回答:您是要實現自己的服務器還是使用現有的技術。 JMS-API顯然將成爲後一種情況的起點。有很多實現提供者,Glassfish本身的參考實現,HornetQ獨立或作爲JBoss實例的一部分,僅舉兩個例子。使用JMS發送消息在理解一些基本概念時非常簡單,它們可以同時包含文本和二進制數據。 使用現有解決方案的另一種方法是實現您的客戶端可以連接到的WebService,這將是基於REST的Web服務的JAX-RS。這種方法也是更獨立於平臺的,在撰寫本文時,我不知道支持JMS的Android客戶端的庫,並且大多數其他編程語言都完全支持基於REST的服務。但是,如果您不想使用任何現有的protocoll,則必須堅持自己的服務器和客戶端實現。所以這將是所提到的套接字編程。好吧,這個任務並不容易:你的服務器不會同時處理多個客戶端,在另一個請求完成之前不會阻止一個請求,而是提供一些機制來授權客戶端訪問服務器的應用程序。當您同時處理多個客戶端時,您將可以共享您的客戶端之間共享的資源,以便對這些資源的訪問必須同步,這些主題與併發編程相關,並且是其自己的一個安靜的有趣的信息技術領域。您的應用程序設計的其他相互影響的方面可能是使用支持JNDI進行資源綁定或實施CDI容器的決策,以便客戶可以輕鬆地調整您的消息交換格式。這很有趣,但不是一天內的任務。 ;)
歡迎來到StackOverflow http://stackoverflow.com/questions/how-to-ask – gtgaxiola
我投了這個問題,這裏是爲什麼:這實際上是一個非常明確和謹慎的問題。他要求一個非常簡單的事情,「我如何通過網絡發送消息」可能有很多方法可以做到這一點,但這很好,只要以單一方式回答就可以解決問題。 –
服務器應該是多線程的,不一定要但可能更容易,並且應該始終監聽新的連接。當它收到一個新的連接時,將它放到一個新的線程中,去做它的業務,然後再聽另一個連接。在那裏尋找教程,你會發現它。通過練習和嘗試新技術,你會發現哪些是有效的,哪些沒有。我上面列出的選項僅僅是解決您的項目的衆多解決方案之一。祝你好運:) –