2015-01-31 8 views
5

1.0 से पहले जंग के संस्करणों में, मैं from_str() का उपयोग String से SocketAddr को परिवर्तित करने में सक्षम था, लेकिन यह फ़ंक्शन अब मौजूद नहीं है। मैं इसे जंग 1.0 में कैसे कर सकता हूं?स्ट्रिंग टू सॉकेटएडर

let server_details = reader.read_line().ok().expect("Something went wrong").as_slice().trim(); 

let server: SocketAddr = from_str(server_details); 

let mut s = BufferedStream::new((TcpStream::connect(server).unwrap())); 

उत्तर

8

from_strparse को नाम दिया गया था और अब एक विधि आप तारों पर कॉल कर सकते हैं है:

use std::net::SocketAddr; 

fn main() { 
    let server_details = "127.0.0.1:80"; 
    let server: SocketAddr = server_details.parse() 
     .expect("Unable to parse socket address"); 
    println!("{:?}", server); 
} 

आप संकल्प DNS प्रविष्टियों करने में सक्षम होना चाहते हैं, तो आइपीवी को {4,6 } पते, आप ToSocketAddrs उपयोग कर सकते हैं:

use std::net::{TcpStream,ToSocketAddrs}; 

fn main() { 
    let server_details = "stackoverflow.com:80"; 
    let server: Vec<_> = server_details.to_socket_addrs() 
     .expect("Unable to resolve domain") 
     .collect(); 
    println!("{:?}", server); 

    // Even easier, if you want to connect right away: 
    TcpStream::connect(server_details) 
     .expect("Unable to connect to server"); 
} 

to_socket_addrs एक गाना के रूप में एक iterator देता है ले DNS प्रविष्टि एकाधिक आईपी पते तक विस्तार कर सकती है! ध्यान दें कि यह कोड Playground में काम नहीं करेगा क्योंकि नेटवर्क एक्सेस अक्षम है; आपको इसे स्थानीय रूप से आजमाने की आवश्यकता होगी।

+0

धन्यवाद! बहुत अच्छा काम करता है! – user3746744

3

शेम्पास्टर के उत्तर में मैं "अगर आप तुरंत कनेक्ट करना चाहते हैं" पर विस्तार करूंगा।

ध्यान दें कि किसी चीज़ से कनेक्ट करने के लिए आपको पहले से स्ट्रिंग को SocketAddr में बदलने की ज़रूरत नहीं है।

fn connect<T: ToSocketAddr>(addr: T) -> TcpStream { ... } 

इसका मतलब है कि आप बस किसी भी रूपांतरण के बिना connect() के लिए एक स्ट्रिंग पारित कर सकते हैं: TcpStream::connect() और अन्य कार्यों जो पतों, ToSocketAddr विशेषता का एक उदाहरण स्वीकार करने के लिए परिभाषित कर रहे हैं

TcpStream::connect("stackoverflow.com:80") 

इसके अलावा, यह है बेहतर स्ट्रिंग को SocketAddr में अग्रिम में कनवर्ट नहीं करना है क्योंकि डोमेन नाम एकाधिक पते को हल कर सकते हैं, और TcpStream में इसे संभालने के लिए विशेष तर्क है।

+0

स्ट्रिंग एक मेजबान है: stdin से पोर्ट कॉम्बो। पता हर बार बदल जाएगा। मुझे पूरा यकीन है कि इसे परिवर्तित करने की जरूरत है। – user3746744

+0

क्षमा करें, लेकिन मुझे समझ में नहीं आता कि आपका क्या मतलब है। जब आप बस कुछ से कनेक्ट करना चाहते हैं तो आपको 'to_socket_addr()' मैन्युअल रूप से कॉल करने की आवश्यकता नहीं है। और हर बार पता बदलने के बारे में आपका क्या मतलब है? –

संबंधित मुद्दे