首页 文章

如何使用TCPListener(或其他方法)绑定到网络上的设备

提问于
浏览
1

我有一个网络地址为192.168.xxx.xxx端口xxxx的设备 . 这是我网络上的有效地址 . 我曾尝试使用TCPListener为服务器 Build 连接,但收到错误“错误..... System.Net.Sockets.SocketException:请求的地址在System.Net.Sockets.Socket的上下文中无效 . SystemB上的System.Net.Sockets.Socket.Bind(EndPoint localEP)处的SystemB的Net.Net.Sockets.TcpListener.Start(Int32 backlog)处的DoBind(EndPoint endPointSnapshot,SocketAddress socketAddress)位于WinMarkTest的System.Net.Sockets.TcpListener.Start()处C中的.Server.Main():..... \ Server.cs:第49行“

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

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

我怎么能 Build 这种联系 . 该设备位于我的内部网络(我的防火墙一侧)内 .

1 回答

  • 1

    TcpListener将在您的服务器上运行,等待与特定端口的连接 . TcpClient将用于 Build 与192.168.xxx.xxx:xxxx地址的连接 . 因此,当您执行Listener.Start时,您正在侦听在侦听器运行的地址和端口上与侦听器 Build 的连接 . 本地地址表示您正在侦听要进行连接的地址 .

    如果要连接到远程ip:端口,那么应该尝试使用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 test.net.user@gmail.com\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();
        }
    

相关问题