C#套接字(未建立连接)

时间:2014-07-11 19:13:53

标签: c# sockets

这是我的客户

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“连接未在127.0.0.1:1234上建立”。错误代码是10061。 请帮忙解决这个问题。

3 个答案:

答案 0 :(得分:1)

这绝对是防火墙问题。

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

ctrl + f并搜索100061.在使用Socket Exceptions时这是一个很好的习惯,因为你可以从错误代码中得到一些含义(通常,有时候这并不是很有用)。此错误代码属于&#34;无法建立连接,因为目标计算机主动拒绝它&#34;组。有关链接的更多详细信息。

The Socket也可能没有快速发布,或者你的幸运已经被其他东西使用了。我会首先检查防火墙设置,因为这是一件非常简单的事情。

答案 1 :(得分:0)

您需要指定防火墙例外。您可以使用命令行执行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"

答案 2 :(得分:0)

正如M. Avery所说,这听起来像是防火墙/端口问题。我已经测试了您的代码并且工作正常。

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