Tôi còn khá mới với Java và đang cố gắng mã hóa thiết lập bộ thu kênh người gửi trong đó kênh đại diện cho phương tiện truyền dẫn và đưa ra lỗi trong gói. Do đó, kênh sử dụng kênh ổ cắm máy chủ để kết nối với người gửi và người nhận. Hầu hết điều này đều ổn, nhưng khi tôi cố đọc đối tượng bên trong kênh Gói
khi nào nó sẽ ném Chế độ chặn bất hợp phápNgoại lệ
. Người gửi đưa ra nội dung có vẻ là ngoại lệ IO tương ứng, "Kết nối hiện tại đã bị máy chủ từ xa buộc đóng". Kênh
Mã trong chương trình như sau (một số phần đã được loại trừ để đơn giản):
Đặt selectedKeys = selector.selectedKeys();
Iterator keyIterator = selectedKeys.iterator();
trong khi (keyIterator.hasNext()) {
Phím SelectionKey = keyIterator.next();
keyIterator.remove();
if (key.isAcceptable()) {
SocketChannel sc = ((ServerSocketChannel) key.channel()).accept();
sc.configureBlocking(false);
sc.register(bộ chọn, SelectionKey.OP_READ);
}
if (key.isReadable()) {
SocketChannel sc = (SocketChannel) key.channel();
sc.configureBlocking(false);
Gói gói = readPacket(sc);
sc.close();
// thực hiện mọi việc với gói...
其中đọc gói
定义如下:
Gói tĩnh riêng readPacket(SocketChannel sc) ném IOException,
ClassNotFoundException {
ObjectInputStream trong = mới
ObjectInputStream(sc.socket().getInputStream());
Gói gói = (Gói) in.readObject();
trả lại gói tin;
}
Bất cứ ai có thể giải thích những gì ném ngoại lệ và cách sửa nó?
Luồng bị chặn. Bạn không thể sử dụng chúng ở chế độ không chặn. Xem Javadoc.
Tôi là một lập trình viên xuất sắc, rất giỏi!