[英]Cannot set socket to nonblocking
我試圖與Java網絡打交道,並讓服務器與客戶端通信。 我在嘗試使套接字無阻塞時發現錯誤。 有人可以瀏覽我的代碼,然后嘗試查找錯誤嗎?
public static void main(String[] args) throws IOException {
ServerSocket serverSocket = null;
boolean listening = true;
try {
serverSocket = new ServerSocket(4444);
serverSocket.configureBlocking(false);
System.out.println("Server started");
} catch (IOException e) {
System.out.println("Could not listen on port: 4444.");
System.exit(-1);
}
while (listening){
Socket s = serverSocket.accept();
long id = clients_id++;
ServerThread st = new ServerThread(s, id);
addClient(id, st);
st.start();
}
serverSocket.close();
}
這不是一個“ bug”,只是一個編譯錯誤。 您已經發明了一種不存在的方法,因此編譯器不會讓您調用它。 請參閱java.nio.channels.ServerSocketChannel。 與SocketChannel一樣,它確實具有configureBlocking()方法。
但是,鑒於您已編寫的代碼,根本沒有理由設置非阻塞模式。 您所寫的是阻塞模式TCP服務器的典型框架。
另外,當您遇到異常時,不要只打印自己設計的消息。 打印異常隨附的內容。
NIO默認情況下處於阻止狀態,因此您無需進行設置。
我使用阻塞NIO,除非您有成千上萬個連接,否則我建議使用該功能。
我建議您做的是使用像ExecutorService這樣的線程池。
我在嘗試使套接字無阻塞時發現錯誤。
由於您沒有說明錯誤是什么,我懷疑您提供的代碼中沒有該錯誤。
您為什么要使其不阻塞?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.