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 sử dụng Java socket để nhận và đảm bảo dữ liệu có thể được đọc. Các ví dụ đượ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ớ like nhé.
Mục lục
- Việc tiếp nhận ổ cắm đảm bảo rằng dữ liệu có thể được đọc
- socket nhận dữ liệu byte phần cứng và phân tích nó
Việc tiếp nhận ổ cắm đảm bảo rằng dữ liệu có thể được đọc
?
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
/**
* Cuối cùng sử dụng phương pháp này
* @param trong luồng đầu vào
* @param bData đọc dữ liệu
* @throws IOException
*/
riêng tư
tĩnh
vô hiệu
readData(InputStream trong,
byte
[] bDữ liệu)
ném
Ngoại lệ IO
số nguyên
tắt =
0
;
số nguyên
chiều dài = bData.length;
số nguyên
đọcChiều dài =
0
;
LÀM
{
tắt = readLength+tắt;
chiều dài = chiều dài-đọcChiều dài;
readLength = in.read(bData, tắt, độ dài);
}
trong khi
(readLength!=chiều dài);
}
|
socket nhận dữ liệu byte phần cứng và phân tích nó
Đây là lần đầu tiên tôi tiếp xúc với loại dự án này. Trong quá trình xử lý số liệu tôi nhận thấy có nhiều vấn đề tôi sẽ ghi lại để khắc sâu trí nhớ.
Phần cứng ghi dữ liệu vào bộ đệm và dữ liệu được truyền đi là byte.
Lúc đầu, chúng tôi nghĩ đến việc nhận nó dưới dạng luồng byte. Tuy nhiên, trong ngôn ngữ C, loại byte không có bit dấu và giá trị tối đa là 255. Trong Java, loại byte có bit dấu và giá trị tối đa là 127. Vấn đề nảy sinh khi khi dữ liệu byte nhận được vượt quá 127 thì bit đầu tiên sẽ được lấy làm bit dấu, một số bit cuối cùng sẽ được bù, đảo ngược và cộng thêm một để trở thành số âm. (Phương pháp xử lý sẽ được viết sau).
Sau này muốn lười biếng không xử lý dữ liệu nên tính đến việc dùng mảng char để nhận. Char có tổng cộng mười sáu bit, chắc chắn có thể tiếp nhận dữ liệu tám bit do phần cứng gửi đến. Nhưng khi nhận lại dữ liệu thì vẫn xảy ra sự cố. Khi chuyển đổi luồng byte thành luồng ký tự và lưu vào mảng char, kiểu char sẽ tự động xử lý dữ liệu. Trong kiểu char, giá trị thập lục phân tối đa tương ứng với một ký tự là 7F, nhưng dữ liệu được phần cứng truyền đi có thể như 0X80, 0X8D. Khi kiểu char nhận dữ liệu lớn hơn 7F thì không thể xử lý được, các ký tự sẽ bị định dạng bị cắt xén và dữ liệu cũng sẽ thay đổi tương ứng. Việc lưu trữ dữ liệu một cách chính xác khi nhận được là điều không thể chứ đừng nói đến việc xử lý và xác minh dữ liệu một cách chính xác sau này. bỏ cuộc.
Cuối cùng, chúng ta phải quay lại hướng nhận byte. Sau khi thảo luận với đồng nghiệp, đối với dữ liệu vượt quá kiểu byte Java, tính chính xác của dữ liệu có thể được đảm bảo bằng cách xử lý phù hợp và lưu trữ trong Int.
Phương pháp điều trị:
Đánh giá dữ liệu trong mảng byte Khi nó là số âm, nó được AND với 0xff và được lưu trữ trong mảng Int để đảm bảo rằng dữ liệu là bình thường.
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
ServerSocket máy chủSocket;
thử
{
máy chủSocket =
mới
Máy chủ ổ cắm(
9090
);
Hệ thống.out.println(
"***Đang chờ kết nối máy khách***"
);
Ổ cắm socket = serverSocket.accept();
InputStream là = socket.getInputStream();
byte
[] ngày =
mới
byte
[
500
];
số nguyên
count = is.read(dữ liệu);
số nguyên
[] Định dạng dữ liệu=
mới
số nguyên
[
500
];
vì
(
số nguyên
tôi=
0
;i
nếu như
(dữ liệu[i]<
0
){
dataFormat[i]=dữ liệu[i]&
0xff
;
}
khác
{
dataFormat[i]=dữ liệu[i];
}
}
}
nắm lấy
(IOException e) {
e.printStackTrace();
}
|
Trên đây là kinh nghiệm cá nhân của mình, hi vọng có thể cho các bạn tham khảo và mong các bạn có thể ủng hộ mình.
Liên kết gốc: https://blog.csdn.net/guanzhengyinqin/article/details/79402165.
Cuối cùng, bài viết về ví dụ về java socket nhận được đảm bảo có thể đọc dữ liệu có tại đây. Nếu bạn muốn biết thêm về phiên bản java socket nhận được đảm bảo có thể đọc dữ liệu, vui lòng tìm kiếm bài viết CFSDN hoặc. tiếp tục duyệt 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!