由于目标计算机主动拒绝连接,因此无法建立连接

本文关键字:连接 建立 目标计算机 拒绝 | 更新日期: 2023-09-27 18:25:39

嗨,我正在使用TCPCLient和TCPlinner传输数据,但我在不连接时出错下面是我的代码

 private void button1_Click(object sender, EventArgs e)
 {
    TcpClient tcpc = new TcpClient("192.168.21.46", 10);            
    NetworkStream nts = tcpc.GetStream();
    if (nts.CanWrite)
    {
         Byte[] sends = System.Text.Encoding.ASCII.GetBytes(textBox1.Text.ToCharArray());
         nts.Write(sends, 0, sends.Length);
         nts.Flush();
    }
}
private void button2_Click(object sender, EventArgs e)
{
    TcpListener myListener = new TcpListener(10);
    myListener.Start();
    while (true)
    {
        //Accept a new connection
        Socket mySocket = myListener.AcceptSocket();
        if (mySocket.Connected)
        {                   
            //make a byte array and receive data from the client 
            Byte[] receive = new Byte[64];
            int i = mySocket.Receive(receive, receive.Length, 0);
            char[] unwanted = { ' ', ' ', ' ' };
            string rece = System.Text.Encoding.ASCII.GetString(receive);
            label1.Text = rece.TrimEnd(unwanted);                  
        }
    }
}

我以相同的形式添加了这两个按钮,其中提到的Ip-Address是我的系统Ip地址。有人能告诉我为什么会发生这种事吗。甚至我也删除了防火墙设置。

由于目标计算机主动拒绝连接,因此无法建立连接

首先,您的UI将挂起按钮2,因为它卡在while(true)循环上,所以使用BeginAcceptSocket(IAsyncResult r,Object state)进行异步。

其次,你必须使用环回地址,否则防火墙应该阻止端口10,假设它没有打开。此外,TcpListener(int端口)是obsolate,最好使用TcpListen器(IPAddress localddr,int端口)并同时使用环回地址。

我假设您有两个不同的程序,一个在侦听,另一个在发送。如果你不这样做,就把它们分开。我想你有一个网络问题,但不能确切地说为什么它被屏蔽了。

您使用的端口10通常太低,不适合任意应用程序使用,即使它当前未被占用。如果您正在构建一个自定义协议,请尝试在大约1000以上的端口上侦听(更多的是经验法则)。你可以看看这里http://technet.microsoft.com/en-us/library/cc959828.aspx或者在谷歌上搜索"tcp知名端口"以获取更多详细信息,并确保不会发生冲突。

尝试运行TCP侦听器,然后打开命令提示符并键入以下

telnet localhost 10

或者使用您将10更改为的端口号。我尝试了您的代码,能够毫无问题地连接到端口10。如果你没有"telnet"程序,你可以在Windows中打开该功能。(搜索"功能"并选择"打开或关闭窗口功能",然后打开"Telnet客户端")

如果telnet程序连接,您就会知道问题与连接无关。如果telnet程序无法连接,那么您就会知道该端口仍有阻塞。请尝试其他端口,然后重新测试连接。一旦telnet连接,您就可以专注于程序的TCP客户端部分。