CFSDN nhấn mạnh vào giá trị tạo ra nguồn mở và chúng tôi cam kết xây dựng nền tảng chia sẻ tài nguyên để mọi nhân viên CNTT có thể tìm thấy thế giới tuyệt vời của bạn tại đây.
Bài viết trên blog CFSDN này Lập trình Java sử dụng UDP để thiết lập một mã hệ thống trò chuyện nhóm được tác giả sưu tầm và biên soạn. Nếu bạn quan tâm đến bài viết này, hãy nhớ thích nó.
Giới thiệu các lớp java liên quan.
Giao thức DatagramSocket.
lớp công khai DatagramSocket mở rộng Object 。
Lớp này đại diện cho một socket được sử dụng để gửi và nhận các gói datagram.
Ổ cắm datagram là điểm gửi hoặc nhận cho dịch vụ phân phối gói. Mỗi gói được gửi hoặc nhận trên ổ cắm datagram được đánh địa chỉ và định tuyến riêng. Nhiều gói được gửi từ máy này sang máy khác có thể đi theo các tuyến khác nhau và có thể đến theo thứ tự khác nhau.
Gửi quảng bá UDP luôn được bật trên DatagramSocket. Để nhận các gói quảng bá, DatagramSocket phải được liên kết với một địa chỉ ký tự đại diện. Trong một số triển khai, các gói quảng bá cũng có thể được nhận khi DatagramSocket được liên kết với một địa chỉ cụ thể hơn.
Dữ liệu có thể được gửi và nhận thông qua việc gửi và nhận của DatagramSocket.
public void receive(DatagramPacket p) ném ra IOException 。
Nhận gói datagram từ ổ cắm này. Khi phương thức này trả về, bộ đệm của DatagramPacket sẽ chứa đầy dữ liệu đã nhận. Gói datagram cũng chứa địa chỉ IP của người gửi và số cổng trên máy của người gửi.
Phương thức này chặn cho đến khi nhận được một datagram. Trường độ dài của đối tượng gói datagram chứa độ dài của thông tin nhận được. Nếu tin nhắn dài hơn độ dài gói tin, tin nhắn sẽ bị cắt bớt.
Nếu trình quản lý bảo mật tồn tại và phương thức checkAccept của trình quản lý bảo mật không cho phép hoạt động nhận thì không thể nhận được gói.
tham số:
p - DatagramPacket nơi dữ liệu đến sẽ được đặt.
Ném:
IOException - nếu xảy ra lỗi I/O.
SocketTimeoutException - nếu setSoTimeout đã được gọi trước đó và giá trị thời gian chờ đã trôi qua.
PortUnreachableException - Có thể bị ném ra khi ổ cắm được kết nối với mục tiêu hiện không thể truy cập được. Lưu ý rằng không có gì đảm bảo rằng ngoại lệ này sẽ được đưa ra.
IllegalBlockingModeException - nếu ổ cắm này có kênh được liên kết và kênh đó ở chế độ không chặn.
public void send(DatagramPacket p) ném ra lỗi IOException.
Gửi gói datagram từ ổ cắm này. DatagramPacket chứa thông tin chỉ ra: dữ liệu được gửi, độ dài của nó, địa chỉ IP của máy chủ từ xa và số cổng của máy chủ từ xa.
Nếu có trình quản lý bảo mật và ổ cắm hiện không được kết nối với địa chỉ từ xa, thì trước tiên, phương pháp này sẽ thực hiện một số kiểm tra bảo mật. Đầu tiên, nếu p.getAddress().isMulticastAddress() là đúng, thì phương thức này gọi phương thức checkMulticast của trình quản lý bảo mật với p.getAddress() làm tham số. Nếu giá trị của biểu thức này là sai thì phương thức này sẽ gọi phương thức checkConnect của trình quản lý bảo mật với p.getAddress().getHostAddress() và p.getPort() làm tham số. Nếu thao tác không được phép, mỗi lệnh gọi đến phương thức quản lý bảo mật sẽ dẫn đến SecurityException.
tham số:
p - DatagramPacket sẽ được gửi.
Ném:
IOException - nếu xảy ra lỗi I/O.
SecurityException - nếu trình quản lý bảo mật tồn tại và phương thức checkMulticast hoặc checkConnect của nó không cho phép gửi.
PortUnreachableException - Có thể bị ném ra khi ổ cắm được kết nối với mục tiêu hiện không thể truy cập được. Lưu ý rằng không có gì đảm bảo rằng ngoại lệ này sẽ được đưa ra.
IllegalBlockingModeException - nếu ổ cắm này có kênh được liên kết và kênh đó ở chế độ không chặn.
Gói dữ liệu 。
lớp công khai cuối cùng DatagramPacket mở rộng Object 。
Lớp này đại diện cho các gói datagram UDP, được sử dụng để triển khai các dịch vụ phân phối gói không kết nối.
Người xây dựng
DatagramPacket(byte[]buf,intlength) 。
Xây dựng DatagramPacket để nhận gói dữ liệu có độ dài.
DatagramPacket(byte[]buf,intlength,InetAddressaddress,intport) 。
Xây dựng gói datagram để gửi gói có độ dài đến số cổng được chỉ định trên máy chủ được chỉ định.
Ví dụ về hệ thống trò chuyện nhóm UDP.
UDP không có kết nối. Trò chuyện nhóm là gửi dữ liệu đến địa chỉ phát sóng (địa chỉ phát sóng), để mọi người sẽ nhận được tin nhắn bằng cách sử dụng các chuỗi, bắt đầu chuỗi người gửi và chuỗi người nhận, và người gửi đọc đầu vào bàn phím dưới dạng đầu ra, người nhận sẽ đọc. nhập thông tin và hiển thị nó.
người gửi.
UdpSender.java 。
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
bưu kiện
cn.xidian.socket;
nhập khẩu
java.io.BufferedReader;
nhập khẩu
java.io.IOException;
nhập khẩu
java.io.InputStreamReader;
nhập khẩu
java.net.DatagramPacket;
nhập khẩu
java.net.DatagramSocket;
nhập khẩu
java.net.InetAddress;
công cộng
lớp học
UdpNgười gửi
mở rộng
Chủ đề{
@Ghi đè
công cộng
vô hiệu
chạy() {
thử
{
Ổ cắm DatagramSocket =
mới
Giao diện
BufferedReader trong =
mới
Bộ đệm đọc(
mới
InputStreamReader(System.in)) ;
Dòng dây =
vô giá trị
;
trong khi
((dòng = trong.readLine()) !=
vô giá trị
){
DatagramPacket dữ liệu =
mới
DatagramPacket(line.getBytes(), line.getBytes().length, InetAddress.getByName(
"127.0.0.1"
),
9090
);
socket.gửi(dữ liệu);
}
socket. đóng();
}
nắm lấy
(IOException e) {
e.printStackTrace();
}
}
}
|
Người nhận.
UdpReceiver.java 。
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
bưu kiện
cn.xidian.socket;
nhập khẩu
java.io.IOException;
nhập khẩu
java.net.DatagramPacket;
nhập khẩu
java.net.DatagramSocket;
công cộng
lớp học
Người nhận Udp
mở rộng
Chủ đề {
@Ghi đè
công cộng
vô hiệu
chạy() {
thử
{
Ổ cắm DatagramSocket =
mới
Ổ cắm dữ liệu
9090
);
byte
[] nhiệt độ =
mới
byte
[
1024
];
DatagramPacket dữ liệu =
mới
DatagramPacket(temp, temp.length);
Cờ Boolean =
ĐÚNG VẬY
;
trong khi
(lá cờ){
socket.receive(dữ liệu);
Chuỗi senderAddress = data.getAddress().getHostAddress();
Chuỗi senderHostName = data.getAddress().getHostName();
System.out.println(tên máy chủ người gửi+
"("
+Địa chỉ người gửi+
")"
+
" nói: "
+
mới
Chuỗi(temp,
0
,data.getLength()));
}
socket. đóng();
}
nắm lấy
(IOException e) {
e.printStackTrace();
}
}
}
|
Phương pháp chính.
UdpMain.java 。
?
1
2
3
4
5
6
7
8
9
10
11
|
bưu kiện
cn.xidian.socket;
công cộng
lớp học
Udp Chính {
công cộng
tĩnh
vô hiệu
main(String[] args) {
Người nhận UdpReceiver =
mới
Người nhận Udp();
receiver.start();
Người gửi UdpSender =
mới
UdpSender();
người gửi.start();
}
}
|
Kết quả kiểm tra.

Phía đầu vào đọc đầu vào bàn phím dưới dạng đầu ra và người nhận nhận được tin nhắn và hiển thị IP và tên máy chủ của người gửi.
Tóm tắt.
Trên đây là toàn bộ nội dung bài viết về lập trình Java sử dụng UDP để thiết lập một ví dụ về mã hệ thống chat nhóm hi vọng sẽ hữu ích với mọi người. Bạn bè quan tâm có thể tiếp tục tham khảo các chủ đề liên quan khác trên trang này nếu có thiếu sót gì vui lòng để lại lời nhắn để chỉ ra. Cảm ơn bạn bè đã ủng hộ trang web này! .
Liên kết gốc: http://blog.csdn.net/gavin__zhou/article/details/52116483.
Cuối cùng, bài viết về lập trình Java sử dụng UDP để thiết lập ví dụ mã hệ thống trò chuyện nhóm có ở đây. Nếu bạn muốn biết thêm về lập trình Java sử dụng UDP để thiết lập ví dụ mã hệ thống trò chuyện nhóm, vui lòng tìm kiếm các bài viết CFSDN hoặc tiếp tục duyệt qua các bài viết liên quan. , Tôi hy vọng bạn sẽ ủng hộ blog của tôi trong tương lai! .
Tôi là một lập trình viên xuất sắc, rất giỏi!