如何在c#中拒绝连接尝试?
我有一个监听连接的套接字。我想做的是在尝试连接时有一个接受/拒绝选项。这是我的代码:如何在c#中拒绝连接尝试?,c#,sockets,tcp,C#,Sockets,Tcp,我有一个监听连接的套接字。我想做的是在尝试连接时有一个接受/拒绝选项。这是我的代码: private void StartListening() { while (running) { AcceptingSocket.Listen(100); Socket client = AcceptingSocket.Accept(); if (IncomingConnection!= null) {
private void StartListening()
{
while (running)
{
AcceptingSocket.Listen(100);
Socket client = AcceptingSocket.Accept();
if (IncomingConnection!= null)
{
TcpEventArgs eventArgs = new TcpEventArgs(client);
IncomingConnection(eventArgs);
}
}
}
有没有一种方法可以让.Accept
检查用户是想接受还是拒绝连接?您(几乎)总是想接受连接,因为决定是否连接只能基于客户端发送的信息(用户名、密码等)
因此,在建立连接后,运行授权模块以收集身份验证信息,并在此基础上,决定是否在客户机上调用Close
(在您的示例中)。正如@Blindy所说,您需要接受传入的连接,如果您决定不想继续连接,请关闭它。在Accept
返回之前,您没有对套接字的引用,因此无法根据客户端(如检查提供的凭据或连接的源地址)来决定是否接受
从客户端的角度来看,一旦他们连接到Listen
ing套接字,就会建立连接(操作系统会建立到侦听端口的连接,然后在Accept
调用中移交给您)。您不能在处于侦听状态的套接字上伪造“拒绝连接/对方主动拒绝连接”类型的错误。因此,在客户端看来,Accept
,后跟Close
,看起来与Accept
中止连接的方式相同
如果您有不允许更多连接的编程原因(例如一次只需要一个客户端),那么您可以在Listen
ing套接字接受连接后关闭它,但这通常不是一个好主意。但是如果是否连接的决定是基于传入的IPAddress呢?在不检查任何东西的情况下,您根本不想接受这种连接。这是.NET API设计的一个可悲的结果,不是吗?