2014-10-22 19 views
16

Tôi đang cố gắng kết nối với reference websocket echo server "theo cách thủ công", để tìm hiểu cách giao thức hoạt động (Tôi đang sử dụng socat cho điều đó). Tuy nhiên, máy chủ luôn đóng kết nối mà không cung cấp câu trả lời. Bất kỳ ý tưởng tại sao?Làm cách nào để kết nối với websocket theo cách thủ công, với netcat/socat/telnet?

Dưới đây là những gì tôi làm:

socat - TCP:echo.websocket.org:80 

Sau đó, tôi dán nội dung sau trong terminal:

GET /?encoding=text HTTP/1.1 
Origin: http://www.websocket.org 
Connection: Upgrade 
Host: echo.websocket.org 
Sec-WebSocket-Key: P7Kp2hTLNRPFMGLxPV47eQ== 
Upgrade: websocket 
Sec-WebSocket-Version: 13 

Tôi ngửi các thông số của kết nối với các công cụ phát triển, trong firefox, trên cùng một máy, nơi nó hoạt động hoàn hảo: vì vậy, tôi cho rằng chúng đúng. Tuy nhiên sau đó, máy chủ đóng kết nối ngay lập tức, mà không cung cấp câu trả lời. Tại sao? Làm thế nào tôi có thể thực hiện giao thức "thủ công"?

Tôi muốn thử nghiệm kiểu trong thiết bị đầu cuối của mình và yêu cầu máy chủ trả lời bằng những gì tôi đã nhập (Nó hoạt động trong trình duyệt web).

Trả lời

26

Tôi nghĩ rằng bạn muốn thay đổi dòng ổ cắm để dịch \ n (thức ăn dòng) để CRLF (carriage return & thức ăn đường). Làm info socat sản xuất thông tin chi tiết trong đó bao gồm sửa đổi lần này:

crnl Converts the default line termination character NL ('\n', 0x0a) 
     to/from CRNL ("\r\n", 0x0d0a) when writing/reading on this chan- 
     nel (example). Note: socat simply strips all CR characters. 

Vì vậy, tôi nghĩ rằng bạn sẽ có thể làm điều này:

socat - TCP:echo.websocket.org:80,crnl 
Các vấn đề liên quan