2016-04-01 88 views
0

我是Java Socket編程的新手。我嘗試使用NIO套接字。我遵循客戶端和服務器端的一些代碼。我可以分別使用它們中的每一個。但是當我在main中使用時,只有第一個會開始。我想知道,第一,如果它是合乎邏輯的這樣做的,第二我如何管理這個問題:定義主客戶端和服務器

public static void main(String[] args) { 
NioSocketServer server = new NioSocketServer(); 
NioSocketClient client = new NioSocketClient(); 
+0

服務器和客戶端在一個功能中有什麼意義? 如果有指向它,你不能這樣做,客戶端和服務器必須至少在不同的線程! –

+0

好吧,我要寫一個模塊,它將被插入到另外兩臺機器之間(它們現在正在通信),所以我想扮演客戶端的服務器角色,同時爲服務器端角色amy已經網絡化。所以我從服務器接收消息,例如,我將對其進行一些更改,然後將其發送給客戶端 – APNezh

+0

,因此您將創建一個ServerSocket來完成第一件事,因此當第一臺計算機連接時,它會連接到您的ServerSocket,並在該Socket中打開另一個Socket將信息發送到第二臺機器,同時在另一臺機器上打開另一個ServerSocket –

回答

1

你需要(根據您的需要或NioSocketServer)創建一個ServerSocket:

ServerSocket server = new ServerSocket(8080); 
Socket client = server.accept(); 
// get data from client 
// do your processing here and then 
// make your reponse into a String msg 
Socket secondMachine = new Socket(secondMachineAddress, secondMachinePort); 
secondMachine.getOutputStream().write(msg.getBytes()); // something like this! 
secondMachine.getOutputStream().flush(); 

當然代碼只是一個模式,它只是給你一個想法如何完成,它不會工作(或編譯!)。

+0

問題來自於這個事實,即在NIO中定義新的AsynchronousSocketChannel或AsynchronousServerSocketChannel,你應該爲每個定義單獨的CompletionHandler,所以你不能很容易地定義它們。 – APNezh

+0

好吧,你沒有提到這是你的問題的一部分,所以我怎麼知道!? –