Tôi đang cố gắng gửi một gói đóng gói cho khách hàng của tôi từ máy chủ của tôi giả tạo, tôi nên gửi giá trị thô nào để khách hàng hiểu rằng tôi đang đóng kết nối? Nó có khác nhau giữa các giao thức websocket không?WebSocket Đóng gói
Trả lời
Ở mức đơn giản nhất - chỉ cần đóng kết nối - điều đó sẽ hoạt động tốt.
Rất sớm hixie-76 có một chuỗi đơn giản để đóng báo hiệu: chỉ cần gửi hai byte 0xFF, 0x00 (đầu tiên là loại khung, thứ hai là độ dài).
Trong tất cả các thông số kỹ thuật sau, khung hình phức tạp hơn một chút; họ được chia nhỏ như:
- (1 byte) cờ và opcode
- (số biến byte) mặt nạ lá cờ và payload length
- (không bắt buộc, 4 byte) mặt nạ
- ({chiều dài} bytes) payload
Đối với phần đầu tiên, opcode chúng tôi muốn là 0x08, và điều này phải được kết hợp với cờ "vây", 0x80 (điều này chỉ cho biết khung không được chia thành nhiều thư) 0x88.
Đối với phần thứ hai, chúng ta có thể sử dụng thông điệp có độ dài bằng 0 nhưng chúng ta cần biết liệu chúng ta là máy khách đến máy chủ (luôn che dấu, vì vậy chúng ta cần sử dụng 0x80) hoặc máy chủ đến máy khách (không bao giờ đeo mặt nạ, vì vậy chúng tôi cần sử dụng 0x00).
Phần thứ ba là chỉ được bao gồm nếu cờ mặt nạ được đặt, vì vậy từ máy khách đến máy chủ; vì chúng tôi không gửi tải trọng nên không có điểm nào phát minh ra mặt nạ mã hóa an toàn - chúng tôi chỉ có thể sử dụng 0x00 0x00 0x00 0x00.
Thứ tư bị bỏ qua vì chúng tôi ghi rõ độ dài bằng không.
Vì vậy: client-to-server: 0x88 0x80 0x00 0x00 0x00 0x00
Và server-to-client: 0x88 0x00
Tôi có quyền truy cập vào lớp giao thức thô, hiện tại tôi đang sử dụng 'process.context.Send (new byte [4] {80,01,00,00}, true, true); 'và nó có vẻ hoạt động hoàn hảo ngoại trừ việc tôi nhận được kết nối' WebSocket tới 'ws: // localhost: 8000 /' không thành công: bit nén phải là 0 nếu không có lỗi 'mở rộng khung mở rộng được thương lượng'. – user2498443
@user Tôi đồng ý với điều đó; bạn đã nhận được giá trị 80 từ đâu? Đó là rsv1 và rsv3 set, opcode zero. Bạn cần phải gửi mã số 8 với bộ bit vây - số thập phân 136? (Xong trong đầu của tôi - Tôi chưa kiểm tra giá trị đó) –
Tôi xin lỗi vì nó khác nhau giữa các giao thức? Tôi không truy cập vào các kết nối, tôi sử dụng Alchemy trong C# và stupidly họ không có một phương pháp để chấm dứt một kết nối. Cảm ơn tất cả những người giúp đỡ! :) – user2498443
- 1. Máy chủ Websocket trong ứng dụng đóng gói chrome
- 2. WebSocket Tornado đóng mỗi phút một lần
- 3. Đóng WebSocket chính xác (HTML5, Javascript)
- 4. Đóng gói JDK/JRE
- 5. Đối tượng đóng gói
- 6. Đóng gói và nén
- 7. Đóng gói dữ liệu ...?
- 8. Gói Google App Engine "đóng gói lại"
- 9. WebSocket kết nối không được đóng bằng SocketRocket
- 10. Gevent-Websocket Phát hiện kết nối đã đóng
- 11. Đóng gói Thư viện JNI
- 12. Tài sản và đóng gói
- 13. Lớp đóng gói chặt chẽ
- 14. Đóng gói khối so với đóng gói cục bộ - hãy để
- 15. Trình đóng gói Adobe Flash iOS ném java.lang.OutOfMemoryError khi đóng gói các dự án lớn
- 16. - Bin-đóng gói, sắp xếp thùng để đóng gói các đối tượng n
- 17. Đóng gói nhiều .exe trong gói .msi đơn
- 18. Đóng gói nhiều rpms trong một tệp
- 19. iterating đóng gói container STL lồng nhau
- 20. Abstraction vs Đóng gói trong Java
- 21. Bit đóng gói mảng các số nguyên
- 22. Đóng gói bốn byte trong phao
- 23. Hình chữ nhật đóng gói Thuật toán
- 24. Chức năng đóng gói C++ mẫu
- 25. Thuật toán đóng gói thùng rác 3d
- 26. Sẽ đóng gói phá vỡ kế thừa?
- 27. đóng gói một ứng dụng python
- 28. Đóng gói kho Git không thành công
- 29. Viết các ràng buộc và đóng gói
- 30. Đóng gói SQL trong một named_scope
khách hàng của bạn =? – dtb
Đây có phải là câu hỏi giống như http://stackoverflow.com/questions/17175016/alchemy-forcefully-disconnect-client – Amy
http://msdn.microsoft.com/en-us/library/system.net.websockets.websocket .closeasync.aspx có vẻ phù hợp. Vui lòng cho biết những gì bạn đã thử và những gì không hiệu quả với bạn. –