2009-07-27 13 views
5

मैं सी # में एक गेम बना रहा हूं और मैं प्रतिद्वंद्वी की प्रगति (आंदोलनों और इतने पर) प्रदर्शित करना चाहता हूं। इसलिए मैं प्रतिद्वंद्वी को टीसीपी प्रोटोकॉल के माध्यम से खेल में घटनाएं भेजता हूं।कैसे ठीक करें "कनेक्शन प्रयास विफल हुआ क्योंकि कनेक्टेड पार्टी ने समय के बाद उचित प्रतिक्रिया नहीं दी ..." त्रुटि?

मैं पहले से ही स्थानीय होस्ट पर अपने आवेदन की कोशिश की है और यह काम करता है, लेकिन जब मैं इंटरनेट पर संवाद करने के क्रम में मेरी बाहरी पते के इस्तेमाल करने की कोशिश मैं() कक्षा में नीचे त्रुटि मिलती है TcpInformer.Connect:

एक कनेक्शन का प्रयास विफल हो गया क्योंकि जुड़े पार्टी ठीक से समय की एक अवधि के बाद कोई जवाब नहीं दिया, या स्थापित कनेक्शन विफल रहा क्योंकि कनेक्ट किए गए मेजबान प्रतिक्रिया (मेरे बाहरी IP पता) :(बंदरगाह)

मैंने सोचा में नाकाम रही है समस्या यह थी कि मैं व्यवहार करता था इंड एनएटी लेकिन मैंने पहले ही आईपी 10.0.0.1 पर बंदरगाह 49731 के लिए पोर्टफॉरवर्डिंग स्थापित की है और कुछ भी नहीं बदला है।

मेरा दूसरा अनुमान विंडोज फ़ायरवॉल था, लेकिन जब भी मैंने फ़ायरवॉल को रोक दिया तो मेरा ऐप काम करना शुरू नहीं कर सका।

दो पीसी के कनेक्ट करने के लिए मेरे कोड है:



     TcpInformer peer; 
     TcpHost server; 

     public void PrepareConnection() // for server (host) 
     { 
      playerType = PlayerType.One; 
      server = new TcpHost(form, this); 
      server.Start("10.0.0.1", 49731); 
     } 

     public void PrepareConnection2() // for client 
     { 
      playerType = PlayerType.Two; 
      peer = new TcpInformer(form, this); 
      peer.Connect("MY EXTERNAL IP", 49731); 
     } 


// classes TcpHost and TcpInformer 

    public interface ITcpCommunication 
    { 
     #region Operations (3)  

     void ReadData(); 

     void SendData(byte[] message); 

     void SendData(byte[] message, int size); 

     #endregion Operations  
    } 

    public class TcpInformer : ITcpCommunication 
    { 
     #region Fields (9)  

     private NetworkStream con_ns; 
     private TcpClient con_server; 
     private bool connected; 
     private Fmain form; 
     private SecondPlayer player; 
     private int port; 
     private string server; 
     private string stringData; 

     #endregion Fields  

     #region Delegates and Events (1) 

     // Events (1)  

     public event SimulationEventHandler ReadEvent; 

     #endregion Delegates and Events  

     #region Constructors (1)  

     public TcpInformer(Fmain form, SecondPlayer player) 
     { 
      this.form = form; 
      connected = false; 
      this.player = player; 
     } 

     #endregion Constructors  

     #region Methods (6)  

     // Public Methods (5)  

     /// 
     /// 
     /// 
     /// e.g., server = "127.0.0.1" 
     /// e.g., port = 9050 
     public void Connect(string server, int port) 
     { 
      this.port = port; 
      this.server = server; 
      connected = true; 

      try 
      { 
       con_server = new TcpClient(this.server, this.port); 
      } 
      catch (SocketException ex) 
      { 
       connected = false; 
       MessageBox.Show("Unable to connect to server" + ex.Message); 
       return; 
      } 

      con_ns = con_server.GetStream(); 
     } 

     public void Disconnect() 
     { 
      form.Debug("Disconnecting from server...", "Player2Net"); 
      con_ns.Close(); 
      con_server.Close(); 
     } 

     public void ReadData() 
     { 
      if (con_ns != null) 
      { 
       if (con_ns.DataAvailable) 
       { 
        byte[] data = new byte[1200]; 
        int received = con_ns.Read(data, 0, data.Length); 

        player.ProcessReceivedData(data, received); 
       } 
      } 
      else 
      { 
       form.Debug("Warning: con_ns is not inicialized.","player2"); 
      } 
     } 

     public void SendData(byte[] message) 
     { 
      con_ns.Write(message, 0, message.Length); 
      con_ns.Flush(); 
     } 

     public void SendData(byte[] message, int size)   
     { 
      if (con_ns != null) 
      { 
       con_ns.Write(message, 0, size); 
      } 
     } 
     // Private Methods (1)  

     private void Debug(string message) 
     { 
      form.Debug("Connected to: " + server + "port: " + port.ToString() + ": " + message, "Player2Net"); 
     } 

     #endregion Methods  
    } 

    public class TcpHost : ITcpCommunication 
    { 
     #region Fields (9)  

     private ASCIIEncoding enc; 
     private Fmain form; 
     private TcpListener listener; 
     private SecondPlayer player; 
     private int port; 
     private Socket s; 
     private string server; 
     private bool state; 

     #endregion Fields  

     #region Delegates and Events (1) 

     // Events (1)  

     public event SimulationEventHandler ReadEvent; 

     #endregion Delegates and Events  

     #region Constructors (1)  

     public TcpHost(Fmain form, SecondPlayer player) 
     { 
      this.player = player; 
      this.form = form; 
      state = false; 
      enc = new ASCIIEncoding(); 
     } 

     #endregion Constructors  

     #region Methods (5)  

     // Public Methods (5)  

     public void Close() 
     { 
      state = false; 
      s.Close(); 
      listener.Stop(); 
     } 

     public void ReadData() 
     { 
      if (state == true) 
      { 
       if (s.Available > 0) // if there's any data 
       { 
        byte[] data = new byte[1200]; 
        int received = s.Receive(data); 
        player.ProcessReceivedData(data, received); 
       } 
      } 
     } 

     public void SendData(byte[] message) 
     { 
      if (state == true) 
      { 
       s.Send(message); 
      } 
     } 

     public void SendData(byte[] message, int size) 
     { 
      if (state == true) 
      { 
       s.Send(message, size, SocketFlags.None); 
      } 
     } 

     public void Start(string p_ipAddress, int listenPort) 
     { 
      //IPAddress ipAddress = IPAddress.Loopback 
      IPAddress ipAddress = IPAddress.Parse(p_ipAddress); 

      IPEndPoint ipLocalEndPoint = new IPEndPoint(ipAddress, listenPort); 

      //listener = new TcpListener(ipAddress, listenPort); 
      listener = new TcpListener(ipLocalEndPoint); 
      server = "[provider]"; 
      port = listenPort; 
      listener.Start(); 
      form.Debug("Server is running", "Player1Net"); 
      form.Debug("Listening on port " + listenPort, "Player1Net"); 
      form.Debug("Waiting for connections...", "Player1Net"); 
      s = listener.AcceptSocket(); 
      form.Debug("Connection accepted from " + s.RemoteEndPoint, "Player1Net"); 
      state = true; 
     } 

     #endregion Methods  
    } 


वहाँ एक रास्ता कैसे क्या गलत है की जाँच करने के है? सहायता बहुत सराहना की है!

+1

मुझे पता चला कि समस्या क्या थी। मैं 10.0.0.1 को सुन रहा था और अपने बाहरी आईपी (मेरे कार्यक्रम का दूसरा उदाहरण) तक पहुंचने की कोशिश कर रहा था जो इंटरनेट पर एक कनेक्शन के साथ कंप्यूटर पर असंभव है। क्या मुझे यह पोस्ट हटा देना चाहिए? –

+0

समाधान को समझाते हुए अपना स्वयं का उत्तर जोड़ें, और इसे स्वीकार्य के रूप में चिह्नित करें। – Richard

+0

इस पोस्ट को छोड़ दें। यह मेरे लिए सहायक था। –

उत्तर

6

मुझे पता चला कि समस्या क्या थी। मैं 10.0.0.1 को सुन रहा था और अपने बाहरी आईपी (मेरे कार्यक्रम का दूसरा उदाहरण) तक पहुंचने की कोशिश कर रहा था जो इंटरनेट पर एक कनेक्शन के साथ कंप्यूटर पर असंभव है।

0

मुझे एडब्ल्यूएस वीपीएन में भी एक ही समस्या का सामना करना पड़ा।

मैंने proxy.company.com (बाहरी आईपी) को 10.0.0.5 में बदल दिया।

और यह अब काम करता है।

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

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