2009-12-02 14 views
8

Tengo algún tipo de problema y no puedo verificarlo en casa si funciona o no. Aquí está el códigoNo se puede conectar desde la máquina remota

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(); 
     } 
    } 
} 

Tengo un programa sencillo, así conectarse a este y luego enviar una cadena de datos. Funciona bien en localhost, pero hay un problema cuando trato de conectarme con un coputer diferente.

Incluso apagué el firewall en mi PC y enrutador, como lo hice en la computadora portátil de mi amigo. Cada vez que intento conectarme, su computadora rechaza la conexión. Tal vez estoy haciendo algo mal?

Por supuesto, ipAddress es una dirección local ahora ya que solo está trabajando con eso en este momento. ¿Alguna sugerencia de que hacer?

Respuesta

12

Es necesario configurar para que acepte conexiones desde cualquier IP, hay una función de sobrecarga DirecciónIP para esto:

System.Net.IPAddress.Any 

usarlo en lugar de 127.0.0.1 y va a arreglar el problema.

1

Creo que es su computadora (el servidor) la que se niega a conectarse porque 127.0.0.1 es local (-only).

probar este sencillo sobrecarga:

TcpListener tcpListener = new TcpListener(port); 
+0

Se dice que este método ha quedado obsoleto. Utilicé un localhost ip porque estoy escuchando en mi computadora para la conexión entrante. Creo que debería funcionar como es, ¿o estoy equivocado? – Allek

+0

127001 es solo tu PC _desde_ esa PC. Necesita escuchar en una IP externa visible, se la IpDdress. Cualquier respuesta. –

4

Estás escuchando en 127.0.0.1 que es la dirección de bucle de retorno, que es una dirección especial que significa 'este equipo'. Esto significa que solo aceptará conexiones que se realicen en la misma máquina en la que se ejecuta el servidor.

Necesita escuchar en una (o más) de las direcciones IP reales del servidor.

+0

¿Debo usar allí mi IP de "Internet" para escuchar las conexiones entrantes? – Allek

+0

Puede usar IPAddress.Any para escuchar en TODAS sus interfaces o la dirección de una interfaz particular para escuchar JUST en esa interfaz. Si necesita escuchar en varias de sus interfaces, pero no todas, necesita un oyente por dirección. –

3

Su problema es que la configuración de una dirección IP explícitamente al inicializar el TcpListener solo le permitirá aceptar conexiones de con la dirección. Por lo tanto, al ingresar la dirección local de 127.0.0.1 solo aceptará conexiones que se originen desde su PC.

La aplicación que desea utilizar es el siguiente:

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

Esta voluntad permite conexiones desde cualquier dirección IP para conectarse a su programa en el puerto especificado.

Cuestiones relacionadas