2013-07-31 50 views
3

嗨,我使用的TcpClient和TCPlitner来传输数据,但我得到的错误不低于连接 是我的代码因为目标机器主动拒绝,所以无法建立连接?

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 apddress增加了我系统IP地址。谁能告诉我为什么发生这种情况。即使我也删除防火墙设置。

+0

你在同一时间按下两个按钮,或者我不明白的东西... – Cynede

+1

是目标机器上的端口免费供您使用? – MrFox

+0

@Heather一键点击连接插座,然后传送和第二个按钮recive数据 – Jankya

回答

0

我假设你有两个不同的方案,而另一种是发送人听。如果你不这样做,把它们分开。我认为你有一个网络问题,但不能确切地说明为什么它被阻止。

您使用端口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客户端部分。

+0

目标机器是相同的,即使我打开telnet的功能,但得到同样的问题,现在我使用高端口号,但没有运气。事实上,我想从一个exe文件发送一些数据到另一个exe文件,为此我使用这个。但我坚持连接tcp。 – Jankya

0

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

其次,你必须使用环回地址或其他防火墙应该阻止端口10假定它不是开放的。此外,TcpListener(int port)是obsolote,它更好地使用TcpListener(IPAddress localddr,int port)并使用两个回送地址。

相关问题