我需要一些幫助,我想我有一個簡單的網絡相關的問題。它還將幫助我更好地瞭解所有這些工作,知道什麼不是.close()'ed。我相信這很簡單,但對我來說它非常新穎。這是客戶端程序。如果我能弄明白的話,我很可能會追加服務器。由於java.net.BindException如何清除套接字或導致它的事件?
public class Server {
public static void main(String[] args) {
start();
}
static int start = 0;
public static void start() {
try {
ServerSocket serverSocket = new ServerSocket(4567);
Socket socket = serverSocket.accept();
//1) Take and echo input (In this case a message)
BufferedReader bf = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String message = bf.readLine();
System.out.println("Message recieved from Client:" + message);
//2) Response of client message
PrintWriter printWriter = new PrintWriter(socket.getOutputStream(), true);
printWriter.println("Server echoing back the message ' " + message + " ' from Client");
} catch (IOException e) {
System.out.println("e " + e);
System.exit(-1);
}
start++;
clearUp();
if (start < 5) {
System.out.println("Closing binds and Restarting" + start);
start();
}
}
public void clearUp(){
//How would I clear the stuff that is left bound
so I can restart via start() and avoid the
java.net.BindException: Address already in use: JVM_Bind ?
}
}
我怎麼會清除()被留下裝訂,這樣我可以通過開始重新啓動的東西,避免java.net.BindException:地址已在使用:JVM_Bind?
你打算讓'start'遞歸調用嗎? –
你能發佈錯誤信息嗎? – Houseman
這個代碼的結構有幾個主要的問題。主要問題是您沒有關閉服務器套接字。我建議你閱讀可用於描述Java中套接字編程的_many_教程之一,並應用其中描述的技術。具體而言,您只需要打開一次服務器套接字,然後啓動一個單獨的線程來處理每個連接。 –