2008-12-07 12 views
5

बाध्य किया गया है, मैं पोर्ट नंबर के बारे में परेशान किए बिना एक टीसीपी सॉकेट बना देता हूं [socket.sin_port = 0] से बांधने के लिए। हालांकि बाद में अगर मैं क्लाइंट के पोर्ट नंबर को प्रिंट करना चाहता हूं तो मैं यह कैसे कर सकता हूं? क्लाइंट सी एप्लिकेशन (लिनक्स पर) कई क्लाइंट बनाता है जो सर्वर से कनेक्ट हो जाते हैं। मुद्दों को डीबग करने के लिए मैं ईथर पर यातायात को पकड़ता हूं। मैंने अंक में पोर्ट नंबर को मुद्रित करने के बारे में सोचा था, जबकि समस्या उत्पन्न होती है ताकि ईथरियल पर फ़िल्टरिंग आसान हो जाए।टीसीपी पोर्ट नंबर निर्धारित करना जिस ग्राहक को

किसी भी मदद की सराहना की जाएगी।

-Prabhu

उत्तर

10

उपयोग getsockname() एक सफल कनेक्शन के बाद सॉकेट पते और पोर्ट प्राप्त करने के लिए कहते हैं।

संपादित करें: सही विधि का नाम। कभी-कभी मैं एक खिड़की से दूसरे विंडो में एक साधारण शब्द की प्रतिलिपि नहीं बना सकता!

2

मेरा मानना ​​है कि डायरॉन का मतलब getsockname() था। यदि आप क्लाइंट साइड (साइड कॉलिंग connect()) प्रोग्रामेटिक रूप से पोर्ट नंबर निर्धारित करने की आवश्यकता है तो यह वही है। सर्वर की तरफ (साइड कॉलिंग bind()), आप कनेक्टेड सॉकेट से वही जानकारी प्राप्त करने के लिए getpeername() का उपयोग करेंगे।

हालांकि, यदि आप डिबगिंग कर रहे हैं और कोड नहीं बदल सकते हैं, तो आप ऑपरेटिंग सिस्टम के आधार पर नेटस्टैट या सॉकस्टैट उपयोगिता जैसी चीजों का उपयोग कर समाप्त कर देते हैं। मुझे यकीन नहीं है कि लिनक्स (या यहां तक ​​कि आपका विशेष पैकेज) के तहत कौन सी सुविधाएं उपलब्ध हैं लेकिन मैं man sockstat से शुरू करूंगा। यदि यह स्थापित है, तो आप इसे किसी भी तरफ से चला सकते हैं और देख सकते हैं कि कौन से अंतराल को प्रक्रियाओं को सौंपा गया है। grep के साथ इसे संयोजित करें और आप आमतौर पर एथेरियल में फ़िल्टर करने के लिए कौन सा पता लगा सकते हैं। सौभाग्य!

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