2011-10-29 45 views
6

Tôi có mã sau đây đọc trả lời từ máy chủ POP thông qua Sockets trong Java. Nhưng vấn đề là đôi khi, khi tôi sử dụng hàm readLine() để đọc từ máy chủ và nếu máy chủ không trả lời với bất kỳ phản hồi nào, ứng dụng của tôi sẽ treo ở đó, chờ phản hồi từ máy chủ.Đặt giới hạn hết hạn để readLine()?

socket.connect(new InetSocketAddress("pop.server.com", 110), 3000); 
input = socket.getInputStream(); 
BufferedReader incoming = new BufferedReader(new InputStreamReader(input)); 
incoming.readLine(); //This line will cause my application to hang if the server does not respond with a reply 

Có cách nào để đặt thời gian chờ hoặc một số cách khác khi máy chủ không trả lời sau một khoảng thời gian nhất định, ứng dụng sẽ ngừng chờ phản hồi và tiếp tục thực hiện khác không?

Trả lời

4

Tôi khuyên bạn nên thử Socket.setSoTime(timeout)

+2

Điều này không hết thời gian để đọc toàn bộ dòng. Điều gì nếu khách hàng tiếp tục gửi byte nhưng không bao giờ kết thúc dòng ?? – grom

+0

@grom Đó là một rủi ro. Khách hàng luôn có thể gửi cho bạn dữ liệu vô tận gây ra lỗi hết bộ nhớ. Nếu bạn cần xử lý tùy chỉnh, bạn phải tự viết mã. –

+0

@grom Bạn có thể sử dụng Read() trong vòng lặp của riêng bạn. Phương thức đó chỉ đọc một ký tự. Nếu bạn kết hợp nó với thời gian chờ bạn sẽ có thể làm những gì bạn muốn. Không hoàn toàn giống như "tự viết mã" :) –