【问题标题】:C# Asynchronous TCP Listener Socket does not accept connectionsC# 异步 TCP 侦听器套接字不接受连接
【发布时间】:2021-12-16 15:55:27
【问题描述】:

我尝试在 C# 上创建我的第一个异步套接字程序,尽管代码没有错误,但它不接受连接。我已经通过 Telnet 进行了检查。 这是我的 TCP 服务器代码: 我刚刚在互联网上看到了一些示例,但我找不到我的问题,我认为应该在我的代码中添加一些其他内容。

 class Program
{
    static byte[] Mybuffer = new byte[4096];
   static TcpClient tc = new TcpClient();
     
    private static void PrintUsageInfo()
    {

    }
    static void Main(string[] args)
    {

        TcpListener tl = new TcpListener(IPAddress.Parse("192.168.1.141"), 8008);
        tl.Start();
        tl.BeginAcceptTcpClient(OnCompleteTCP, tl);


    }



    static void OnCompleteReadData(IAsyncResult isa)
    {
        int countreadbytes = 0;
        
        
        try
        {
            //TcpClient tc;
            tc = (TcpClient)isa.AsyncState;
            countreadbytes = tc.GetStream().EndRead(isa);
            if (countreadbytes==0)
            {
                Console.WriteLine("USER Disconnected");
                //client disconnect
                return;
            }
            
            //continue to get data
            tc.GetStream().BeginRead(Mybuffer, 0, Mybuffer.Length, OnCompleteReadData, tc);
            Console.Write(Encoding.ASCII.GetString(Mybuffer));
        }
        catch(Exception ex)
        {
            Console.WriteLine(ex.ToString());
        }

    }
    static void OnCompleteTCP(IAsyncResult isa)
    {
        
        TcpListener tcpl = (TcpListener)isa.AsyncState;
        
       
       
        tc=tcpl.EndAcceptTcpClient(isa);
        tc.GetStream().BeginRead(Mybuffer, 0, Mybuffer.Length, OnCompleteReadData, tc);
        
    }
}

那么问题出在哪里?

【问题讨论】:

  • 听起来像是防火墙的东西,或者是绑定地址的东西;最初,尝试使用IPAddress.Any 作为第一个参数。如果它有效,那就太好了。如果没有,请暂时关闭防火墙。如果可行,请为端口 8008 制定防火墙规则
  • TNX。关闭防火墙是我为解决此问题而采取的第一个措施,但即使使用 IpAddress.Any 也不起作用!我想应该是很简单的东西我找不到
  • 你能远程登录到目标机器上的任何其他服务吗? netstat -a 会列出监听端口

标签: c# sockets tcplistener


【解决方案1】:

感谢 Caius Jard,我检查了 netstat -a 以查看所有监听端口,但我的端口不存在。所以我发现这可能是运行进程的问题。我将 BeginAcceptTcpclient 放在了一个 while(true) 循环上,它现在运行良好!

static void Main(string[] args)
    {

        TcpListener tl = new TcpListener(IPAddress.Any, 8008);
        tl.Start();
        while (true) { tl.BeginAcceptTcpClient(OnCompleteTCP, tl); }


    }

【讨论】:

    猜你喜欢
    • 2011-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-07
    • 2021-12-30
    • 1970-01-01
    • 2017-01-05
    • 2016-11-19
    相关资源
    最近更新 更多