Created
October 19, 2016 16:08
-
-
Save tera3939/2335ea659829d6f17dfcc9a7dbcdd4b4 to your computer and use it in GitHub Desktop.
TCP通信したい(できない)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
use std::io; | |
use std::io::prelude::*; | |
use std::net::{IpAddr, TcpStream, SocketAddr}; | |
use std::env; | |
fn session(stream: &mut TcpStream){ | |
let _ = stream.write(b"ENTER\r\n"); | |
let mut banner = String::new(); | |
let _ = stream.read_to_string(&mut banner); | |
println!("{}", banner); | |
} | |
fn main() { | |
let args: Vec<String> = env::args().collect(); | |
match args.len() { | |
// 引数が無ければぺけちょんぱする | |
1 => panic!("hoge"), | |
// 引数が一つの場合, その引数をアドレスとする | |
2 => { | |
let ip_addr = match args[1].parse() { | |
Ok(ipv4addr) => ipv4addr, | |
Err(why) => panic!("{:?}", why), | |
}; | |
let port = 8000; | |
let mut stream = TcpStream::connect(SocketAddr::new(IpAddr::V4(ip_addr), port)).unwrap(); | |
println!("{:p}", &stream); | |
session(&mut stream); | |
}, | |
// 三つ目以降の引数は無視 | |
3 | _ => { | |
let ip_addr = match args[1].parse() { | |
Ok(ipv4addr) => ipv4addr, | |
Err(why) => panic!("{:?}", why), | |
}; | |
let port = match args[2].parse() { | |
Ok(port_number) => port_number, | |
Err(why) => panic!("{:?}", why), | |
}; | |
let mut stream = TcpStream::connect(SocketAddr::new(IpAddr::V4(ip_addr), port)).unwrap(); | |
session(&mut stream); | |
}, | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
use std::io::prelude::*; | |
use std::net::{TcpListener, TcpStream}; | |
use std::thread; | |
fn handle_client(mut stream: TcpStream) { | |
let mut buffer = String::new(); | |
let _ = stream.read_to_string(&mut buffer); // ここから先に行ってくれない | |
if buffer == "ENTER\r\n" { | |
let banner = b"prease input your ID"; | |
stream.write(banner); | |
}; | |
} | |
fn main() { | |
// ソケットを生成 | |
let listener = TcpListener::bind("127.0.0.1:8000").unwrap(); | |
println!("Start Listenig..."); | |
// accept()してるっぽい | |
for stream in listener.incoming() { | |
println!("Accepted!"); | |
match stream { | |
// incoming()がOk返したらhandle_clientのスレッドを生成 | |
Ok(mut stream) => { | |
println!("{:p}", &stream); | |
thread::spawn(move|| { | |
handle_client(stream) | |
}); | |
} | |
// Errが帰ってきたら頑張る | |
Err(e) => { println!("Error: {:?}", e); } | |
} | |
} | |
// ソケットを閉じる | |
drop(listener); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment