如何拒绝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
(在您的示例中)。