我有一个侦听连接的套接字。我想要做的是在尝试连接时有一个接受/拒绝选项。这是我的代码:
private void StartListening()
{
while (running)
{
AcceptingSocket.Listen(100);
Socket client = AcceptingSocket.Accept();
if (IncomingConnection!= null)
{
TcpEventArgs eventArgs = new TcpEventArgs(client);
IncomingConnection(eventArgs);
}
}
}
.Accept
是否有办法检查用户是想接受还是拒绝连接?
答案 0 :(得分:4)
您(几乎)总是希望Accept
连接,因为是否连接的决定只能来自客户端发送的信息(用户名,密码等)。
因此,在建立连接后,运行授权模块以收集身份验证信息,并根据该信息决定是否在Close
上调用client
(在您的示例中)。
答案 1 :(得分:4)
正如@Blindy所说,您需要接受传入连接,如果您决定不想继续该连接,请将其关闭。在Accept
返回之前,您没有Socket
的引用,因此无法执行任何可以让您根据客户端(是否接受)做出是否接受的决定作为检查提供的凭据,或连接的源地址。)
从客户端的角度来看,一旦连接到Listen
套接字,就建立了连接(操作系统建立了与侦听端口的连接,然后在{{1}中移交给您打电话)。您无法伪造处于侦听状态的Accept
上的“拒绝连接/另一方主动拒绝连接”类型错误。因此,Socket
,后跟Accept
,对客户端看起来是相同的,就好像Close
有一些方法可以中止连接。
如果您有编程原因不允许更多连接(例如您一次只需要一个客户端),那么您可以在接受连接后关闭Accept
套接字,但这是通常是一个坏主意。