2017-12-20 12 views
-1

마지막에 개행 문자가있는 응답을 보내는 에코 서버와 통신하는 클라이언트를 작성하기 위해 Tokio 클라이언트 자습서를 따르려고합니다. 여기에 내가 무엇을 가지고 :이 "A \ n을"을 인쇄 할 것으로 예상하고개행 문자를 보내고 있는데도 TCP 에코 서버가 응답하지 않습니다.

extern crate futures; 
extern crate tokio_core; 
extern crate tokio_io; 

use std::net::SocketAddr; 
use std::io::BufReader; 
use futures::Future; 
use tokio_core::reactor::Core; 
use tokio_core::net::TcpStream; 

fn main() { 
    let mut core = Core::new().expect("Could not create event loop"); 
    let handle = core.handle(); 
    let addr: SocketAddr = "127.0.0.1:9999".parse().expect("Could not parse as SocketAddr"); 
    let socket = TcpStream::connect(&addr, &handle); 
    let request = socket.and_then(|socket| { 
     tokio_io::io::write_all(socket, &[65, 12]) 
    }); 
    let buf = vec![]; 
    let response = request.and_then(|(socket, _request)| { 
     let sock = BufReader::new(socket); 
     tokio_io::io::read_until(sock, b'\n', buf) 
    }); 
    let (_socket, data) = core.run(response).unwrap(); 
    println!("{}", String::from_utf8_lossy(&data)); 
} 

을, A에 대한 ASCII 코드는 65 년부터와 줄 바꿈 12. 내 서버가이 명령

ncat -l 9999 --keep-open --exec "/bin/cat" 
를 사용 netcat을이다

이것은 코어에서 응답을 미래에 실행하는 것 같습니다. 내가 여기서 무엇을 놓치고 있니?

+1

글쎄 .. 012입니다! 그러나 그것은 당신이 원하는 것이 아닙니다. 그냥 바이트 리터럴과 스틱 주위에 숯불 코드와 함께 어슬렁. – hellow

답변

4

A에 대한 ASCII 코드는 65이며, 줄 바꿈은 12

아니, 아니에요입니다 :

The decimal set: 

    0 nul 1 soh 2 stx 3 etx 4 eot 5 enq 6 ack 7 bel 
    8 bs  9 ht 10 nl 11 vt 12 np 13 cr 14 so 15 si 
    16 dle 17 dc1 18 dc2 19 dc3 20 dc4 21 nak 22 syn 23 etb 
    24 can 25 em 26 sub 27 esc 28 fs 29 gs 30 rs 31 us 
    32 sp 33 ! 34 " 35 # 36 $ 37 % 38 & 39 ' 
    40 ( 41 ) 42 * 43 + 44 , 45 - 46 . 47/
    48 0 49 1 50 2 51 3 52 4 53 5 54 6 55 7 
    56 8 57 9 58 : 59 ; 60 < 61 = 62 > 63 ? 
    64 @ 65 A 66 B 67 C 68 D 69 E 70 F 71 G 
    72 H 73 I 74 J 75 K 76 L 77 M 78 N 79 O 
    80 P 81 Q 82 R 83 S 84 T 85 U 86 V 87 W 
    88 X 89 Y 90 Z 91 [ 92 \ 93 ] 94^ 95 _ 
    96 ` 97 a 98 b 99 c 100 d 101 e 102 f 103 g 
104 h 105 i 106 j 107 k 108 l 109 m 110 n 111 o 
112 p 113 q 114 r 115 s 116 t 117 u 118 v 119 w 
120 x 121 y 122 z 123 { 124 | 125 } 126 ~ 127 del 

A는 65이지만, 줄 바꿈은 10입니다.

즉, 처음에는 십진수 값을 사용할 이유가 없습니다. 대신, 바이트 리터럴을 사용하십시오.

tokio_io::io::write_all(socket, b"A\n")