我用Java編寫了一個小型客戶端服務器程序。服務器在某個端口上創建一個ServerSocket
並持續監聽。 Client
發送一些樣本信息到這個服務器。 當我運行Client
第一次連接被服務器接受,信息由服務器打印。然後Client
程序退出。當我再次運行Client
時,連接被接受,但數據不被打印。 請檢查以下代碼。Java服務器程序在客戶端第二次運行時不接受來自客戶端的輸入
服務器程序
package javadaemon;
import java.io.DataInputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public class MyDaemon {
public static void main(String [] args) throws IOException {
ServerSocket ss = new ServerSocket(9879);
ss.setSoTimeout(0);
while(true) {
Socket s = ss.accept();
System.out.println("socket is connected? "+s.isConnected());
DataInputStream dis = new DataInputStream(s.getInputStream());
System.out.println("Input stream has "+dis.available()+" bytes available");
while(dis.available() > 0) {
System.out.println(dis.readByte());
}
}
}
}
客戶端程序
package javadaemon;
import java.io.*;
import java.net.Socket;
public class Client {
public static void main(String [] args) {
try {
System.out.println("Connecting to " + "127.0.0.1"
+ " on port " + 9879);
Socket client = new Socket("127.0.0.1", 9879);
System.out.println("Just connected to "
+ client.getRemoteSocketAddress());
OutputStream outToServer = client.getOutputStream();
DataOutputStream out = new DataOutputStream(outToServer);
for(int i=0; i<100; i++) {
out.writeUTF("Syn "+i);
}
} catch(IOException e) {
}
}
}
請幫我找到爲什麼下一次沒有數據由服務器接收。
for循環後調用'out.flush()'和'out.close()'。 –
避免使用空的「catch」塊,它們打敗異常處理的目的 –
順便說一句,當你的程序工作不正常並且你想調試它時,順便吃異常並沒有什麼特別的好處。 –