C# 套接字双连接?
C# Socket double connect?
我想知道,如果我在 C# 中创建一个套接字并将其连接到服务器,如果我在程序中创建一个线程来尝试与服务器进行另一个连接,服务器是否会看到来自同一个服务器的 2 个连接地方还是只有一个?
代码看起来像这样(套接字双连接):
IPHostEntry ipHostInfo = Dns.GetHostEntry("127.0.0.1");
IPAddress ipAddress = ipHostInfo.AddressList[0];
IPEndPoint remoteEP = new IPEndPoint(ipAddress, 11000);
Socket sender = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
sender.ReceiveTimeout = 5000;
sender.Connect(remoteEP);
然后我会在这段代码下面:
Thread thread = new Thread(new ThreadStart(doubleconnect));
thread.Start();
public static void doubleconnect()
{
try
{
sender.Connect(remoteEP);
}
catch (Exception ex)
{
}
}
我有这个问题是因为,在代码的第一部分,我们连接到服务器,但我们没有关闭连接,所以通过创建一个线程并重新连接,我认为服务器将看到来自同一个服务器的 2 个连接客户.
那么,服务器会看到这个和 2 个连接还是只有一个连接?
简答:否
您在同一个 Socket
上呼叫 Connect
两次。我查看了 documentation,但如果你这样做的话,它没有说明它的行为,所以我认为可能会发生两件事:
- 你在第二个
Connect
时遇到异常(可能是 SocketException
)
- 没有。由于套接字已经连接,它刚刚通过第二个
Connect
调用。
但是,为什么不尝试一下,看看会发生什么?
我想知道,如果我在 C# 中创建一个套接字并将其连接到服务器,如果我在程序中创建一个线程来尝试与服务器进行另一个连接,服务器是否会看到来自同一个服务器的 2 个连接地方还是只有一个?
代码看起来像这样(套接字双连接):
IPHostEntry ipHostInfo = Dns.GetHostEntry("127.0.0.1");
IPAddress ipAddress = ipHostInfo.AddressList[0];
IPEndPoint remoteEP = new IPEndPoint(ipAddress, 11000);
Socket sender = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
sender.ReceiveTimeout = 5000;
sender.Connect(remoteEP);
然后我会在这段代码下面:
Thread thread = new Thread(new ThreadStart(doubleconnect));
thread.Start();
public static void doubleconnect()
{
try
{
sender.Connect(remoteEP);
}
catch (Exception ex)
{
}
}
我有这个问题是因为,在代码的第一部分,我们连接到服务器,但我们没有关闭连接,所以通过创建一个线程并重新连接,我认为服务器将看到来自同一个服务器的 2 个连接客户.
那么,服务器会看到这个和 2 个连接还是只有一个连接?
简答:否
您在同一个 Socket
上呼叫 Connect
两次。我查看了 documentation,但如果你这样做的话,它没有说明它的行为,所以我认为可能会发生两件事:
- 你在第二个
Connect
时遇到异常(可能是SocketException
) - 没有。由于套接字已经连接,它刚刚通过第二个
Connect
调用。
但是,为什么不尝试一下,看看会发生什么?