【问题标题】:C# Sockets(Connection is not established)C# Sockets(连接未建立)
【发布时间】:2014-07-11 19:13:53
【问题描述】:

这是我的客户

static Socket sck;
    static void Main(string[] args)
    {
        sck = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
        IPEndPoint localEndpoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 1234);
        try
        {
            sck.Connect(localEndpoint);
        }
        catch (Exception ex)
        {
            Console.Write("Unable to connect local endpoint! \r\n ");
            Main(args);
        }
        string text = Console.ReadLine();
        byte[] data = Encoding.ASCII.GetBytes(text);
        sck.Send(data);
        Console.Write("Data sent ! \r\n");
        Console.Write("Press any key to continue...");
        Console.Read();
        sck.Close();
    }

这是我的服务器。

 static byte[] Buffer { get; set; }
    static Socket sck;
    static void Main(string[] args)
    {
        sck = new Socket(AddressFamily.InterNetwork, SocketType.Stream,  ProtocolType.Tcp);
        sck.Bind(new IPEndPoint(IPAddress.Any, 1234));
        sck.Listen(100);
        Socket accepted = sck.Accept();
        Buffer = new byte[accepted.ReceiveBufferSize];
        int byteReades = accepted.Receive(Buffer);
        byte[] formatted = new byte[byteReades];
        for (int i = 0; i < byteReades; i++)
        {
            formatted[i] = Buffer[i];
        }
        string strData = Encoding.ASCII.GetString(formatted);
        Console.Write(strData + "\r\n");
        sck.Close();
        accepted.Close();
        Console.ReadKey();
    }

当我尝试运行客户端以向服务器发送数据时,我遇到了 SocketException "Connection is not established on 127.0.0.1 :1234" 。错误代码为 10061。 请帮助解决这个问题。

【问题讨论】:

  • 我复制了您在 2 个新的控制台应用程序中提供的代码。一个用于客户端,一个用于服务器。他们都工作 100% 罚款。问题很可能是你的问题。也许是防火墙设置。但是代码可以正常工作。
  • 您在哪一行得到异常?
  • 我认为您的防火墙阻止了端口 1234... 错误 10061 是“连接被拒绝”错误。
  • 感谢您的回答,我认为您对防火墙设置的问题是正确的,但我需要在该设置中进行更改。
  • 在这条线上。 sck.Connect(localEndpoint);

标签: c# sockets


【解决方案1】:

这绝对是防火墙问题。

http://msdn.microsoft.com/en-us/library/windows/desktop/ms740668(v=vs.85).aspx

ctrl+f 并搜索 100061。在处理 Socket Exceptions 时,这是一个非常好的习惯,因为您可以从错误代码编号中获得一些含义(通常,有时这不是很有帮助)。此错误代码属于“无法建立连接,因为目标计算机主动拒绝它”组。有关链接的更多详细信息。

也有可能是 The Socket 没有迅速释放,或者你的幸运已经被其他东西使用了。我会先检查防火墙设置,因为这很容易做到。

【讨论】:

  • 我需要更改防火墙设置以解决此错误,只是我是这项技术的初学者
【解决方案2】:

正如 M. Avery 所说,这听起来绝对像是防火墙/端口问题。我已经测试了你的代码,它运行良好。

如果您在 Windows 7 上使用 Windows 防火墙,请查看此链接:http://windows.microsoft.com/en-us/windows/open-port-windows-firewall#1TC=windows-7

【讨论】:

  • 在我看来这不是防火墙问题,因为我从我的机器上禁用了防火墙并且没有防火墙我面临同样的异常。这并不意味着问题不在防火墙设置中??
【解决方案3】:

您需要指定防火墙例外。您可以使用this handy KB article 中指定的命令行来执行此操作。

例子:

netsh advfirewall firewall add rule name="Socket Test" dir=in action=allow remoteip=127.0.0.1 protocol=TCP localport=1234

然后删除它:

netsh advfirewall firewall delete rule name="Socket Test"

【讨论】:

  • 先生,同样的例外。
  • 那么您几乎别无选择,只能配置防火墙例外。但是,我建议不要在 127.0.0.1 上明确设置 ANY/ANY,因为它可能会被滥用。
  • 我添加了一个如何使用 netsh 的示例
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多