यह लगता है कि बूस्ट :: एएसओ प्रत्येक प्रोटोकॉल के लिए एक अलग एंडपॉइंट क्लास परिभाषित करता है, जो किसी विशेष अंतराल पर यूडीपी और टीसीपी परिचालनों को निष्पादित करना चाहते हैं, जो परेशान है (एक से दूसरे में परिवर्तित करना है)। टीसीपी या यूडीपी के बावजूद, मैं हमेशा आईपी एड्रेस (v4 या v6) और पोर्ट नंबर के रूप में एंडपॉइंट के बारे में सोचा था। क्या अलग-अलग वर्गों को उचित ठहराने में महत्वपूर्ण अंतर हैं? (यानी दोनों टीसीपी :: सॉकेट और यूडीपी :: सॉकेट आईपी :: समाप्ति बिंदु की तरह कुछ नहीं स्वीकार कर सकता है?)बूस्ट :: एएसओओपी में टीसीपी :: एंडपॉइंट और udp :: एंडपॉइंट के बीच क्या अंतर है?
6
A
उत्तर
4
सॉकेट अलग ढंग से
socket(PF_INET, SOCK_STREAM)
टीसीपी के लिए बनाई गई हैं, और
socket(PF_INET, SOCK_DGRAM)
यूडीपी के लिए
।
मुझे संदेह है कि Boost.Asio में अलग-अलग प्रकारों का कारण है। अधिक जानकारी के लिए man 7 udp
या man 7 tcp
देखें, मैं लिनक्स मान रहा हूं क्योंकि आपने अपना प्रश्न टैग नहीं किया है।
अपनी समस्या का समाधान करने के लिए, आईपी और पोर्ट को टीसीपी एंडपॉइंट से निकालें और यूडीपी एंडपॉइंट को तुरंत चालू करें।
#include <boost/asio.hpp>
#include <iostream>
int
main()
{
using namespace boost::asio;
ip::tcp::endpoint tcp(
ip::address::from_string("127.0.0.1"),
123
);
ip::udp::endpoint udp(
tcp.address(),
tcp.port()
);
std::cout << "tcp: " << tcp << std::endl;
std::cout << "udp: " << udp << std::endl;
return 0;
}
नमूना मंगलाचरण:
./a.out
tcp: 127.0.0.1:123
udp: 127.0.0.1:123
2
TCP और UDP बंदरगाहों अलग हैं। उदाहरण के लिए, दो अलग-अलग कार्यक्रम एक ही बंदरगाह पर सुन सकते हैं जब तक कि कोई टीसीपी का उपयोग करता है और दूसरा यूडीपी का उपयोग करता है। यही कारण है कि अंतराल वर्ग अलग हैं।