如何拒绝c#中的连接尝试?

时间:2011-05-24 00:47:25

标签: c# sockets tcp

我有一个侦听连接的套接字。我想要做的是在尝试连接时有一个接受/拒绝选项。这是我的代码:

private void StartListening()
{
    while (running)
    {
        AcceptingSocket.Listen(100);
        Socket client = AcceptingSocket.Accept();

        if (IncomingConnection!= null)
        {
            TcpEventArgs eventArgs = new TcpEventArgs(client);
            IncomingConnection(eventArgs);
        }
    }
}

.Accept是否有办法检查用户是想接受还是拒绝连接?

2 个答案:

答案 0 :(得分:4)

您(几乎)总是希望Accept连接,因为是否连接的决定只能来自客户端发送的信息(用户名,密码等)。

因此,在建立连接后,运行授权模块以收集身份验证信息,并根据该信息决定是否在Close上调用client(在您的示例中)。

答案 1 :(得分:4)

正如@Blindy所说,您需要接受传入连接,如果您决定不想继续该连接,请将其关闭。在Accept返回之前,您没有Socket的引用,因此无法执行任何可以让您根据客户端(是否接受)做出是否接受的决定作为检查提供的凭据,或连接的源地址。)

从客户端的角度来看,一旦连接到Listen套接字,就建立了连接(操作系统建立了与侦听端口的连接,然后在{{1}中移交给您打电话)。您无法伪造处于侦听状态的Accept上的“拒绝连接/另一方主动拒绝连接”类型错误。因此,Socket,后跟Accept,对客户端看起来是相同的,就好像Close有一些方法可以中止连接。

如果您有编程原因不允许更多连接(例如您一次只需要一个客户端),那么您可以在接受连接后关闭Accept套接字,但这是通常是一个坏主意。