2017-08-07 84 views
0

我试图连接到使用.NET的TcpClient TCP服务器。为了测试,服务器在我自己的机器上。它最初工作,但不是当我重新启动我的应用程序。无法连接到同一本地TCP服务器两次

所以我写的代码,这个小位尝试连接/断开两次,我想不出我做错了什么:

const int clientPort = 29501; 
const int port = 29500; 

using (var client = new TcpClient(new IPEndPoint(IPAddress.Loopback, clientPort))) 
    client.Connect(IPAddress.Loopback, port); 

using (var client = new TcpClient(new IPEndPoint(IPAddress.Loopback, clientPort))) 
    client.Connect(IPAddress.Loopback, port); 

当我运行这段代码,我得到一个SocketException

每个套接字地址(协议/网络地址/端口)的一个用法通常允许

我在做什么错?使用块不应该正确地释放插座?

+2

你的本地连接不能共享相同的** **的本地端口。 – Amy

+0

@Amy但是'使用'应该在新的连接开始之前断开与该端口的最后连接,对吗? –

+0

Dispose()只是告诉GC该对象可用于收集。它不会立即强制垃圾收集,因此它不会立即导致连接关闭。 – Amy

回答

1

如您在使用MSDN构造器IPEndPoint类型的参数看也结合到指定的端口。在你的情况下,你不需要客户端绑定到另一个端口,只有服务器套接字必须绑定到TCP端口。

所以,你可以使用参数的构造函数来代替:

const int port = 29500; 

using (var client = new TcpClient()) 
    client.Connect(IPAddress.Loopback, port); 

using (var client = new TcpClient()) 
    client.Connect(IPAddress.Loopback, port); 
相关问题