.NET 4 新的 TCP 客户端无法连接:无法建立连接,因为目标机器主动拒绝它
Posted
技术标签:
【中文标题】.NET 4 新的 TCP 客户端无法连接:无法建立连接,因为目标机器主动拒绝它【英文标题】:.NET 4 new TCP client fails to connect: No connection could be made because the target machine actively refused it 【发布时间】:2011-11-22 23:17:57 【问题描述】:我在 win7 和 xp 中都遇到了 .NET 4 Sockets (TcpClient) 的简单问题。
我得到错误:
由于目标机器主动拒绝,无法建立连接
这似乎不是防火墙问题,因为客户端和服务器程序都在同一台计算机上,而且我没有启用任何本地防火墙。
我编写了服务器和客户端(他们在端口 80 上进行通信(我也尝试过其他端口,例如 31000)。我的机器上的端口 80 上没有运行其他任何东西。
客户端代码为:
public void makeConnection()
string server = ClientStatus.myself.ServerName;
port = 80;
ClientStatus.myself.BytesSent = 0.ToString();
client = new TcpClient(server, port);
ClientStatus.myself.Connected = "connected";
stream = client.GetStream();
bytes = new Byte[1024];
我确认服务器和端口是我所期望的。错误发生在 new TcpClient(server, port) 上,它在错误发生之前旋转了大约 4 秒。我还尝试使用 IP 地址 (127.0.0.1) 而不是“myhostname.domain.com”作为服务器(创建客户端套接字的替代方法),但它也失败了。
这是我为服务器编写的代码:
命名空间 SocketListener 类数据监听器 public static DataListener 我自己; TcpListener 服务器 = null; 字节[] 字节; Int32 端口; IP地址本地地址; 主窗口 w;
public DataListener(MainWindow caller)
DataListener.myself = this;
w = caller;
Status.myself.Connected = "starting";
port = 80;
localAddr = IPAddress.Parse("127.0.0.1");
server = new TcpListener(localAddr, port);
bytes = new Byte[1024];
server.Start();
public void acceptLoop()
TcpClient client;
while (true)
// Perform a blocking call to accept requests.
Status.myself.Connected = "waiting";
if (server.Pending())
client = server.AcceptTcpClient();
Status.myself.Connected = "true";
Status.myself.BytesReceived = 0.ToString();
NetworkStream stream = client.GetStream();
dataLoop(stream);
client.Close();
else
Thread.Sleep(100);
return;
// Shutdown and end connection
Status.myself.Connected = "false";
public void dataLoop(NetworkStream stream)
int count = 0;
int i;
Status.myself.ByteRate = "0.0";
Stopwatch watch = new Stopwatch();
watch.Start();
while ((i = stream.Read(bytes, 0, bytes.Length)) != 0)
count += i;
Status.myself.BytesReceived = count.ToString();
watch.Stop();
double rate = count / (watch.ElapsedMilliseconds / 1000);
rate = rate / (1024 * 1024);
Status.myself.ByteRate = rate.ToString();
public void shutdown()
server.Stop();
【问题讨论】:
检查这个[问题][1] [1]:***.com/questions/2972600/… 再试一次,在服务端使用IPAddress.Any
,在客户端使用IpAddress.Loopback
。
【参考方案1】:
我有win7盒子。因此接受传入连接被阻止(甚至是本地连接)。答案是:
运行
netsh http add urlacl url=http://+:80/MyUri user=DOMAIN\user
见:
netsh http add urlacl : add reservation for a group
【讨论】:
以上是关于.NET 4 新的 TCP 客户端无法连接:无法建立连接,因为目标机器主动拒绝它的主要内容,如果未能解决你的问题,请参考以下文章
TCP 错误代码 10061:无法连接到 net.tcp://。连接尝试持续了 00:00:01.0156241 的时间跨度