我有一个简单的程序,我正在开发该程序,以在我的公司在客户端控制的远程计算机上执行一些带宽测试。该程序的一个副本在远程计算机上,并被告知在指定的端口上进行侦听。然后告知同一程序的另一个副本连接到监听计算机,然后发送带有已知长度消息的随机内容的序列化对象。传输是定时的,并将结果发送回原始机器。程序正在侦听TCP端口,但连接到该端口被拒绝
它在环回接口上正常工作;两个节目正在进行中,一个在监听一部分,另一个连接到同一个端口(以共享的方式)并发送数据。但是,当我将该测试的“远程”端移动到同一个Intranet上的不同测试机器上时,即使该程序表示正在“监听”其连接,该端口也无法通过我的开发机器上的程序连接到该端口。我收到标准错误“由于目标机器主动拒绝,无法建立连接”。
这两台计算机之间没有主动防火墙,包括Windows防火墙。我可以创建其他类型的远程连接,例如VNC。
下面是相关的代码片段:
侦听连接:
public void BeginListeningAsServer()
{
if (Listener != null) Listener.Stop();
if (ListenerThread != null) ListenerThread.Join();
Listener = new TcpListener(RemoteAddress, RemotePort);
Listener.Start();
Listening = true;
ListenerThread = new Thread(ListenForConnections);
ListenerThread.Start();
}
private void ListenForConnections()
{
while (Listening)
{
if (Listener.Pending())
Listener.BeginAcceptTcpClient(HandleIncomingClient, null);
}
}
private void HandleIncomingClient(IAsyncResult ar)
{
var client = Listener.EndAcceptTcpClient(ar);
var thread = new Thread(c => HandleIncomingClientMessage((TcpClient)c));
HandlerThreads.Add(thread);
Clients.Add(client);
thread.Start(client);
}
连接到该监听程序:
public void ConnectAsClient()
{
var client = new TcpClient();
client.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
client.Connect(RemoteAddress, RemotePort); //this line fails
Clients.Add(client);
}
您使用哪个端口号? – 2011-05-18 20:42:01
你的应用绑定了什么地址?如果它正在监听(使用1234作为示例)'127.0.0.1:1234',则外部连接将会出现“连接被拒绝”错误。它需要收听机器实际的IP:1234组合,或者听取所有地址。 – 2011-05-18 20:42:40
您是否尝试过使用telnet连接远程计算机?您可以使用命令提示符下的'telnet remoteComputer 29342',其中29342是您尝试连接的端口。如果您能够使用telnet进行连接,那么至少会告诉您问题出在您的客户端应用程序中。如果您无法使用telnet进行连接,则问题出现在服务器应用程序中,或者(更可能)出现网络问题(如您不知道的防火墙)。 – FlyingDeveloper 2011-05-18 20:44:33