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

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

private void StartListening() { while (running) { AcceptingSocket.Listen(100); Socket client = AcceptingSocket.Accept(); if (IncomingConnection!= null) { TcpEventArgs eventArgs = new TcpEventArgs(client); IncomingConnection(eventArgs); } } } 

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

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

从客户端的角度来看,一旦他们连接到Listen ing套接字,就建立了连接(操作系统建立了与监听端口的连接,然后在Accept调用中移交给您)。 你不能伪造一个处于监听状态的Socket上的’Connection Refused /对方主动拒绝连接’类型错误。 所以Accept ,然后是Close ,对客户来说看起来一样,好像有一些方法让Accept中止连接。

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

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

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