Tôi gặp sự cố khi sử dụng số ServerSocket
trong đơn đăng ký của mình.Tạo ServerSocket trong một chuỗi riêng biệt?
Tôi đang tạo ServerSocket
trong hàm tạo của ứng dụng của mình. Hàm khởi tạo của socket gọi phương thức accept()
để đợi máy khách kết nối.
Vấn đề là phương pháp accept()
đang đóng băng toàn bộ ứng dụng của tôi cho đến khi khách hàng kết nối. Vì vậy, tôi muốn hỏi nếu có một thay thế để tạo ra toàn bộ ServerSocket
trong một chủ đề riêng biệt, rằng các nhà xây dựng của ServerSocket
và phương pháp accept()
của nó được gọi là bên cạnh ứng dụng chính của tôi?
Edit:
Nhờ Olivier cho những lời khuyên, đưa .Đồng ý vào một Runnable và tạo ra một threadpool để xử lý các clientconnections.
Thats mã của tôi ngay bây giờ:
public void start(){
final ExecutorService clientProcessingPool = Executors.newFixedThreadPool(10);
Runnable serverTask = new Runnable() {
@Override
public void run() {
try {
serverSocket = new ServerSocket(port);
while (true) {
Socket clientSocket = serverSocket.accept();
objectout = new ObjectOutputStream(clientSocket.getOutputStream());
clientProcessingPool.submit(new ClientTask(clientSocket,objectout));
}
} catch (IOException e) {
System.err.println("Accept failed.");
}
}
};
Everythings chạy tốt! Cảm ơn!
cố gắng di chuyển ổ cắm mã liên quan trong chủ đề riêng biệt? bất kỳ vấn đề cụ thể phải đối mặt? – Ankit
Hãy xem java.nio.channels.AsynchronousServerSocketChannel và xem liệu nó có phù hợp với yêu cầu của bạn hay không. – Crollster
Hoặc vẫn tốt hơn, hãy xem câu hỏi này: http://stackoverflow.com/questions/8940747/how-should-i-use-asynchronousserversocketchannel-for-accepting-connections – Crollster