2009-12-02 27 views
8

मुझे किसी प्रकार की समस्या है और अगर यह काम कर रहा है या नहीं तो मैं इसे घर पर नहीं देख सकता। यहाँ कोडरिमोट मशीन से कनेक्ट करने में असमर्थ

using System; 
using System.Net; 
using System.Net.Sockets; 
using System.Threading; 
using System.IO; 
using System.Net.Security; 

class Program 
{ 
    private static IPAddress ipAddress = IPAddress.Parse("127.0.0.1"); 
    private static int port = 6000; 
    private static string data = null; 

    static void Main(string[] args) 
    { 
     Thread thread = new Thread(new ThreadStart(receiveThread)); 
     thread.Start(); 
     Console.ReadKey(); 
    } 

    public static void receiveThread() 
    { 
     while (true) 
     { 
      TcpListener tcpListener = new TcpListener(ipAddress, port); 
      tcpListener.Start(); 

      Console.WriteLine("Waiting for connection..."); 

      TcpClient tcpClient = tcpListener.AcceptTcpClient(); 

      Console.WriteLine("Connected with {0}", tcpClient.Client.RemoteEndPoint); 

      while (!(tcpClient.Client.Poll(20, SelectMode.SelectRead))) 
      { 
       NetworkStream networkStream = tcpClient.GetStream(); 
       StreamReader streamReader = new StreamReader(networkStream); 

       data = streamReader.ReadLine(); 

       if(data != null) 
        Console.WriteLine("Received message: {0}", data); 
      } 
      Console.WriteLine("Dissconnected...\n"); 
      tcpListener.Stop(); 
     } 
    } 
} 

मैं भी इस से कनेक्ट करने के लिए और फिर डेटा के साथ एक स्ट्रिंग भेज एक साधारण प्रोग्राम है। यह लोकलहोस्ट पर ठीक काम करता है लेकिन एक समस्या है जब मैं एक अलग coputer से कनेक्ट करने की कोशिश कर रहा हूँ।

मैंने अपने पीसी और राउटर पर फ़ायरवॉल भी बंद कर दिया, जैसा कि मैंने अपने दोस्त के लैपटॉप पर किया था। हर बार जब मैंने कनेक्ट करने का प्रयास किया है, तो उसके कंप्यूटर ने कनेक्शन से इनकार कर दिया। शायद मैं कुछ गलत कर रहा हूँ?

बेशक, ipAddress अब स्थानीय पता है क्योंकि यह केवल इस समय के साथ काम कर रहा है। कोई सुझाव क्या करना है?

उत्तर

12

आप इसे किसी भी आईपी से कनेक्शन स्वीकार करने निर्धारित करने की आवश्यकता है, इस के लिए एक IPAddress अधिभार समारोह है:

System.Net.IPAddress.Any 

127.0.0.1 के बजाय इसका उपयोग करें और यह आपकी समस्या का समाधान होगा।

1

मुझे लगता है कि यह आपका कंप्यूटर (सर्वर) है जो कनेक्ट करने से इंकार कर देता है क्योंकि 127.0.0.1 स्थानीय (केवल) है।

TcpListener tcpListener = new TcpListener(port); 
+0

ऐसा कहा जाता है कि इस विधि को बहिष्कृत कर दिया गया है। मैंने एक स्थानीयहोस्ट आईपी का उपयोग किया क्योंकि मैं आने वाले कनेक्शन के लिए अपने कंप्यूटर पर सुन रहा हूं। मुझे लगता है कि यह काम करना चाहिए, या मैं गलत हूँ? – Allek

+0

127001 केवल पीसी ही आपके पीसी _from_ है। आपको आईपीडीड्रेस से बाहर, बाहरी रूप से दिखाई देने वाले आईपी पर सुनने की ज़रूरत है। कोई जवाब नहीं। –

4

आप 127.0.0.1 पर सुन रहे हैं जो लूपबैक पता जो एक विशेष पते 'इस कंप्यूटर' का मतलब है कि है:

इस सरल अधिभार की कोशिश करो। इसका मतलब यह है कि आप केवल उसी मशीन पर बनाए गए कनेक्शन स्वीकार करेंगे जैसे सर्वर चल रहा है।

आपको सर्वर के वास्तविक आईपी पते के एक (या अधिक) को सुनने की आवश्यकता है।

+0

तो मुझे आने वाले कनेक्शन सुनने के लिए "मेरा इंटरनेट" आईपी का उपयोग करना चाहिए? – Allek

+0

आप आईपीएड्रेस का उपयोग कर सकते हैं। किसी भी इंटरफ़ेस पर बस सुनने के लिए अपने सभी इंटरफेस या एक विशेष इंटरफ़ेस का पता सुनने के लिए। यदि आपको अपने कई इंटरफेस सुनने की ज़रूरत है लेकिन सभी को आपको प्रति पते एक श्रोता की आवश्यकता नहीं है। –

3

आपकी समस्या यह है कि जब आप टीसीपीलिस्टर को प्रारंभ करते हैं तो एक आईपी पता स्पष्ट रूप से सेट करना होगा, यह केवल से कनेक्शन स्वीकार करने की अनुमति देगा जो को संबोधित करेगा। इसलिए, 127.0.0.1 के स्थानीय पते को डालने से केवल आपके पीसी से उत्पन्न कनेक्शन स्वीकार होंगे।

कार्यान्वयन आप उपयोग करना चाहते इस प्रकार है:

TcpListener tcpListener = new TcpListener(IPAddress.Any, port); 

हो जाएगा ताकि किसी भी आईपी पते से कनेक्शन निर्दिष्ट पोर्ट पर अपने कार्यक्रम से जुड़ सकते हैं।

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