Xin chào,
Tôi cần trợ giúp viết mã Java để biểu thị dấu xuống dòng
ở dạng Hex 0D. Tôi đã viết một chương trình bằng Java trên hệ thống Unix
truyền dữ liệu đến máy Stratus qua ổ cắm TCP/IP. Dữ liệu tôi gửi tới
hộp Stratus cần phải có dấu xuống dòng trong đó, mà tôi
được viết bằng Java là "\r", nhưng Stratus . Thay vào đó, nó đang mong đợi một hex 0D.
recognize it. It is expecting a hex 0D instead.
Có ai biết cách viết mã bằng Java để vượt qua hex 0D không?
Cảm ơn trước cho bất kỳ lời khuyên bạn có thể cung cấp
vỗ nhẹ
HTTP là viết tắt của giao thức Hyper Text Transfer. Nó là một giao thức lớp ứng dụng để truyền dữ liệu giữa máy khách và máy chủ bằng trình duyệt. Chúng ta có thể sử dụng socket để triển khai HTTP. Chúng tôi phải giải mã/mã hóa tin nhắn theo thông số kỹ thuật HTTP [RFC2616] chỉ là Văn bản. Trong bài viết này, chúng tôi sẽ triển khai những điều cơ bản của giao thức HTTP
máy chủ HTTP
Chúng tôi sẽ tạo một ổ cắm TCP. Cổng mặc định là 80 cho HTTP. Nhưng chúng tôi sẽ sử dụng 8080 để chạy thử nghiệm
Bạn có thể sử dụng mô-đun yêu cầu để nhận phản hồi từ máy chủ HTTP tùy chỉnh
>>> import requests
>>> data = requests.get["//127.0.0.1:8080"]
>>> data.status_code
200
>>> data.text
'Hello World'
>>> data.headers
{}
Trên máy chủ, bạn có thể thấy
GET / HTTP/1.1
Host: 127.0.0.1:8080
User-Agent: python-requests/2.22.0
Accept-Encoding: gzip, deflate
Accept: */*
Connection: keep-alive
Lời yêu cầu
Một yêu cầu HTTP bao gồm sau
GET / HTTP/1.1
1. Một dòng xác định loại yêu cầu và đường dẫn
Host: 127.0.0.1:8080
User-Agent: python-requests/2.22.0
Accept-Encoding: gzip, deflate
Accept: */*
Connection: keep-aliveGET / HTTP/1.1
2. Một bộ tiêu đề kiểu RFC-822 tùy chọn
Host: 127.0.0.1:8080
User-Agent: python-requests/2.22.0
Accept-Encoding: gzip, deflate
Accept: */*
Connection: keep-aliveGET / HTTP/1.1
3. Dữ liệu tùy chọn
Host: 127.0.0.1:8080
User-Agent: python-requests/2.22.0
Accept-Encoding: gzip, deflate
Accept: */*
Connection: keep-alive
Dòng yêu cầu
Để khái quát hóa nó, chúng ta có thể nói dòng yêu cầu bao gồm
GET / HTTP/1.1
Host: 127.0.0.1:8080
User-Agent: python-requests/2.22.0
Accept-Encoding: gzip, deflate
Accept: */*
Connection: keep-alive
4Dòng yêu cầu của yêu cầu trên là.
GET / HTTP/1.1
Host: 127.0.0.1:8080
User-Agent: python-requests/2.22.0
Accept-Encoding: gzip, deflate
Accept: */*
Connection: keep-alive
0Phương pháp này là
GET / HTTP/1.1
Host: 127.0.0.1:8080
User-Agent: python-requests/2.22.0
Accept-Encoding: gzip, deflate
Accept: */*
Connection: keep-alive
1. có nghĩa là chúng tôi muốn lấy dữ liệu từ máy chủ. Lưu ý rằng phương pháp phân biệt chữ hoa chữ thường. Ở đây đường dẫn đến tài nguyên là GET / HTTP/1.1
Host: 127.0.0.1:8080
User-Agent: python-requests/2.22.0
Accept-Encoding: gzip, deflate
Accept: */*
Connection: keep-alive
2 là phiên bản giao thức HTTP chúng tôi đang sử dụng. Và GET / HTTP/1.1
Host: 127.0.0.1:8080
User-Agent: python-requests/2.22.0
Accept-Encoding: gzip, deflate
Accept: */*
Connection: keep-alive
3 là CRLF. CR-LF có nghĩa là vận chuyển trở lại. Nó có nghĩa là kết thúc dòngtiêu đề
GET / HTTP/1.1
Host: 127.0.0.1:8080
User-Agent: python-requests/2.22.0
Accept-Encoding: gzip, deflate
Accept: */*
Connection: keep-alive
4là các trường tiêu đề yêu cầuDữ liệu
Trong yêu cầu trên, chúng tôi chưa gửi bất kỳ dữ liệu nào. Hãy gửi một yêu cầu khác để hiểu mọi thứ tốt hơn một chút
>>requests.post[url=”//127.0.0.1:8080?a=1", headers= {“header1”: “value1”, “header2”: “value2”},data={“key1”: “value1”, “key2”: “value2”}]
Trong bản in chúng ta có thể thấy
________số 8Ở đây phương pháp đã được thay đổi để gửi. Chúng tôi có thể thấy rằng url yêu cầu đã được sửa đổi thành
GET / HTTP/1.1
Host: 127.0.0.1:8080
User-Agent: python-requests/2.22.0
Accept-Encoding: gzip, deflate
Accept: */*
Connection: keep-alive
5. Tiêu đề tùy chỉnh của chúng tôiGET / HTTP/1.1
Host: 127.0.0.1:8080
User-Agent: python-requests/2.22.0
Accept-Encoding: gzip, deflate
Accept: */*
Connection: keep-alive
6 và GET / HTTP/1.1
Host: 127.0.0.1:8080
User-Agent: python-requests/2.22.0
Accept-Encoding: gzip, deflate
Accept: */*
Connection: keep-alive
7 đã được thêm vào. Và dữ liệu mà GET / HTTP/1.1
Host: 127.0.0.1:8080
User-Agent: python-requests/2.22.0
Accept-Encoding: gzip, deflate
Accept: */*
Connection: keep-alive
8 và GET / HTTP/1.1
Host: 127.0.0.1:8080
User-Agent: python-requests/2.22.0
Accept-Encoding: gzip, deflate
Accept: */*
Connection: keep-alive
9 chúng tôi đã gửi cũng có mặttrình duyệt
Chúng tôi có thể truy cập máy chủ từ trình duyệt. Mở trình duyệt của bạn và gõ
>>requests.post[url=”//127.0.0.1:8080?a=1", headers= {“header1”: “value1”, “header2”: “value2”},data={“key1”: “value1”, “key2”: “value2”}]
0Trong thiết bị đầu cuối, bạn sẽ thấy kết quả sau
GET / HTTP/1.1
Host: 127.0.0.1:8080
User-Agent: python-requests/2.22.0
Accept-Encoding: gzip, deflate
Accept: */*
Connection: keep-alive
5máy khách HTTP
Chúng tôi có thể triển khai ứng dụng khách HTTP của riêng mình bằng cách sử dụng cùng một nguyên tắc. Nó là một chương trình ổ cắm đơn giản
Đoạn mã trên sẽ in
GET / HTTP/1.1
Host: 127.0.0.1:8080
User-Agent: python-requests/2.22.0
Accept-Encoding: gzip, deflate
Accept: */*
Connection: keep-alive
6>>requests.post[url=”//127.0.0.1:8080?a=1", headers= {“header1”: “value1”, “header2”: “value2”},data={“key1”: “value1”, “key2”: “value2”}]
1 là giao thức chúng tôi đang sử dụng>>requests.post[url=”//127.0.0.1:8080?a=1", headers= {“header1”: “value1”, “header2”: “value2”},data={“key1”: “value1”, “key2”: “value2”}]
2 là mã trạng thái có nghĩa là yêu cầu đã thành công. Mã trạng thái có ba chữ số>>requests.post[url=”//127.0.0.1:8080?a=1", headers= {“header1”: “value1”, “header2”: “value2”},data={“key1”: “value1”, “key2”: “value2”}]
3 Đó là một giai đoạn một dòng đơn giản cho biết lý do>>requests.post[url=”//127.0.0.1:8080?a=1", headers= {“header1”: “value1”, “header2”: “value2”},data={“key1”: “value1”, “key2”: “value2”}]
4 là nội dung của thư. Đó là phần được sửa đổi
Phản ứng
phản hồi có
- Một dòng đưa ra mã phản hồi
- Một bộ tiêu đề kiểu RFC-822 tùy chọn
- Dữ liệu tùy chọn
Phần kết luận
Đây là xương trần đơn giản. Để biết thêm thông tin, tôi thấy mã nguồn C python hữu ích. https. //github. com/python/cpython/blob/main/Lib/http/client. py