2009-10-20 217 views
1

我有一个网络地址为192.168.xxx.xxx端口xxxx的设备。这是我网络上的有效地址。我曾尝试使用TCPListener为服务器建立连接,但收到错误 “错误..... System.Net.Sockets.SocketException:请求的地址在其上下文 System.Net.Sockets无效。 Socket.DoBind(EndPoint endPointSnapshot,SocketAddress socketAddress) at System.Net.Sockets.Socket.Bind(EndPoint localEP) at System.Net.Sockets.TcpListener.Start(Int32 backlog) at System.Net.Sockets.TcpListener 。开始() 在WinMarkTest.Server.Main()在C:..... \ Server.cs中:第49行“如何使用TCPListener(或其他方法)绑定到网络上的设备

当我使用myListener.Start()方法。

“本地地址”是指使用TCPListener的服务器地址吗?

我该怎么做这个连接。该设备位于我的内部网络中(我的防火墙一侧)。

+0

使用TcpClient连接到您的服务器。 – 2009-10-20 03:03:08

回答

1

TcpListener将在您的服务器上运行,等待连接到特定的端口。一个TcpClient将被用于连接到192.168.xxx.xxx:xxxx地址。因此,当您执行Listener.Start时,您正在监听侦听器正在运行的地址和端口上的侦听器连接。本地地址确实意味着您正在监听连接的地址地址。

如果你想连接到远程ip:port,那么你应该尝试TcpClient。一个简单的测试就是看你是否可以连接到一个smtp服务器或类似的东西。

编辑: - 包括一个非常粗略的例子来连接和发送/接收数据到pop.google.com。

static void Main(string[] args) 
    { 
     Stream networkStream = null; 
     string hostName = "pop.gmail.com"; 
     int port = 995; 
     TcpClient client = new TcpClient(); 
     MemoryStream dataStream = new MemoryStream(); 
     try 
     { 

      client.SendTimeout = 15000; 
      client.ReceiveTimeout = 15000; 
      client.Connect(hostName, port); 
      networkStream = new SslStream(client.GetStream(), true); 
      ((SslStream)networkStream).AuthenticateAsClient(hostName); 
      const int ChunkSize = 256; 
      int bytesRead = 0; 
      const int BufferSize = 1024; 
      byte[] buffer = new byte[BufferSize]; 

      //CONNECT SHOULD GET BANNER 
      string messageReceived; 
      using (dataStream = new MemoryStream()) 
      { 
       do 
       { 
        bytesRead = networkStream.Read(buffer, 0, ChunkSize); 
        dataStream.Write(buffer, 0, bytesRead); 
        messageReceived = Encoding.UTF8.GetString(dataStream.ToArray()); 
       } while (!messageReceived.EndsWith(Environment.NewLine)); 

       Console.WriteLine("Response:{0}", Encoding.UTF8.GetString(dataStream.ToArray())); 
      } 

      buffer = Encoding.UTF8.GetBytes("USER [email protected]\r\n"); 

      networkStream.Write(buffer, 0, buffer.Length); 

      buffer = new byte[BufferSize]; 
      using (dataStream = new MemoryStream()) 
      { 
       do 
       { 
        bytesRead = networkStream.Read(buffer, 0, ChunkSize); 
        dataStream.Write(buffer, 0, bytesRead); 
        messageReceived = Encoding.UTF8.GetString(dataStream.ToArray()); 
       } while (!messageReceived.EndsWith(Environment.NewLine)); 

       Console.WriteLine("Response:{0}", Encoding.UTF8.GetString(dataStream.ToArray())); 
      } 
     } 
     catch (Exception e) 
     { 
      Console.Write(e); 
     } 
     finally 
     { 
      if (networkStream != null) 
      { 
       networkStream.Dispose(); 
       networkStream = null; 
      } 
      if (client != null) 
      { 
       if (client.Connected) 
       { 
        client.Client.Disconnect(false); 
       } 
       client.Close(); 
       client = null; 
      } 
     } 

     Console.ReadKey(); 
    } 
+0

这里是一个如何在MSDN上使用TcpClient的例子,非常简单。 http://msdn.microsoft.com/en-us/library/system.net.sockets.tcpclient.aspx – 2009-10-20 00:24:28

+0

这是一个很好的教程,介绍如何创建一个线程化的tcp服务器:http://www.switchonthecode.com/tutorials/csharp-tutorial-simple-threaded-tcp-server – sshow 2009-10-20 02:04:34

+0

我欣赏评论/答案。我仍在努力。 DC – 2009-10-22 00:17:53

相关问题