Skip to content

Instantly share code, notes, and snippets.

@tera3939
Created October 19, 2016 16:08
Show Gist options
  • Save tera3939/2335ea659829d6f17dfcc9a7dbcdd4b4 to your computer and use it in GitHub Desktop.
Save tera3939/2335ea659829d6f17dfcc9a7dbcdd4b4 to your computer and use it in GitHub Desktop.
TCP通信したい(できない)
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);
},
}
}
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