我有一個基本的服務器和用Java編寫的客戶端。這是我在互聯網上看到的代碼,並進行了一些修改以適應我的需求。現在的事情是,我基本上是從客戶端發送消息到服務器。這條消息將是「你好」。服務器檢查端口6789是否有包含單詞「hello」的消息,如果是,則必須獲取某個目錄中所有文件/子目錄的名稱。這些名字中的第一個被髮送回客戶端,客戶端將其打印出來。我已經打開了端口6789,並將消息從客戶端發送到服務器完美地工作。服務器收到它並執行必要的操作,但不會將數據發送回客戶端。我不知道客戶端是否沒有收到它,或者服務器是否沒有發送它。這裏有兩個代碼:簡單的Java服務器/客戶端不工作?
客戶
String sentence = "hello";
Socket clientSocket = new Socket("localhost", 6789);
DataOutputStream outToServer = new DataOutputStream(
clientSocket.getOutputStream());
outToServer.writeBytes(sentence + '\n');
BufferedReader inFromServer = new BufferedReader(new InputStreamReader(
clientSocket.getInputStream()));
System.out.println(inFromServer.readLine());
clientSocket.close();
服務器
String sentence;
ServerSocket welcomeSocket = new ServerSocket(6789);
while (true) {
Socket connSocket = welcomeSocket.accept();
BufferedReader inFromClient = new BufferedReader(
new InputStreamReader(connSocket.getInputStream()));
sentence = inFromClient.readLine();
if (sentence.contains("hello")) {
File dir = new File("D:/ServerMap/");
String[] children = dir.list();
if (children == null) {
JOptionPane.showMessageDialog(frame,
"Either no directory or it doesn't exist");
} else {
DataOutputStream outToClient = new DataOutputStream(
connSocket.getOutputStream());
outToClient.writeBytes(children[0]);
JOptionPane.showMessageDialog(frame, children[0]);
}
}
}
我通過單獨導出運行的JAR文件執行服務器和客戶端被編譯並在Eclipse中運行。
只是爲了澄清我的問題:客戶端向服務器發送「hello」 - >服務器接收到消息並且它包含「hello」,因此if-statement返回true - >服務器檢查指定目錄中的文件名並找到一對 - >服務器發回它找到的第一個文件名 - >客戶端應該接收文件的名稱和它在Eclipse控制檯打印(這是行不通的部分)
有什麼建議?
PS:這是在本地主機上全部完成。它在1臺計算機上完成,Windows 7 x64,端口6789已打開(在我手動打開它之前根本沒有任何工作),這就是它。
還,服務器需要一個換行符添加到寫調用,因爲客戶端調用'readLine'。 – jtahlborn 2012-07-21 13:54:08
的確,在測試中實際上沒有換行符 – Reimeus 2012-07-21 13:58:06