TCP的东西永远不适合我

时间:2010-02-11 06:23:52

标签: c# winforms exception sockets tcp

我正在尝试获取一些客户端/服务器的东西,只是为了学习如何做...但是在使用了很多样本​​之后,即使在msdn上也有几个教程,但它们都没有用过。

我一直收到以下异常:

System.Net.Sockets.SocketException: No connection could be made because the target machine actively refused it 220.101.27.107:8000
   at System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot, SocketAddress socketAddress)
   at System.Net.Sockets.Socket.Connect(EndPoint remoteEP)
   at t.MainForm.toolStripButton1344_Click(Object sender, EventArgs e) in C:\Users\Jason\Documents\Visual Studio 2008\Projects\t\t\MainForm.cs:line 1648

我的代码是:

private void toolStripButton1344_Click(object sender, EventArgs e)
{
    String strHostName;
    string ipaddy;
    // Getting Ip address of local machine...
    // First get the host name of local machine.
    strHostName = Dns.GetHostName();
    Console.WriteLine("Local Machine's Host Name: " + strHostName);

    // Then using host name, get the IP address list..
    IPHostEntry ipEntry = Dns.GetHostByName(strHostName);
    IPAddress[] addr = ipEntry.AddressList;

    for (int i = 0; i < addr.Length; i++)
    {
        ipaddy = addr[i].ToString();
    }

    Socket st = new Socket(
        AddressFamily.InterNetwork,
        SocketType.Stream, ProtocolType.Tcp);

    IPEndPoint ipe = new IPEndPoint(addr[0], 8000);

    try
    {
        st.Connect(ipe);
    }
    catch (ArgumentNullException ae)
    {
        MessageBox.Show("ArgumentNullException : {0}" + ae.ToString());
    }
    catch (SocketException se)
    {
        MessageBox.Show("SocketException : {0}" + se.ToString());
    }
    catch (Exception ex)
    {
        MessageBox.Show("Unexpected exception : {0}" + ex.ToString());
    }
}

有人可以帮我理解为什么这不起作用吗?

谢谢:)

4 个答案:

答案 0 :(得分:1)

在尝试连接客户端之前,您是否已启动服务器?

此外,请确保您使用的端口(8000)未被防火墙阻止或被其他进程占用。

答案 1 :(得分:0)

基本上,错误消息显示目标计算机(您尝试连接的计算机)使用RST(重置,即在这种情况下无法连接)应答SYN(连接请求数据包)。这意味着,在另一端没有服务器进程监听。

客户端 - 服务器软件分为两部分,即连接到第二部分的客户端,即服务器。服务器进程需要在tcp端口上侦听以接受连接,并且客户端必须连接到服务器IP地址以及它正在侦听的端口。

答案 2 :(得分:0)

好吧,如果你要做的就是测试创建套接字连接,请使用“google.com”作为主机名,使用80作为端口。这保证总是在听。如果不是,那么,那可能意味着世界已经停止了。

答案 3 :(得分:0)

我弄明白为什么它不起作用。最近安装了一个小应用程序(我不知道)以及我选择安装的程序,该应用程序正在使用多个端口。我已经设法摆脱那个应用程序,一切正常工作:)

谢谢大家的帮助和建议!