问题描述
|
我有一个监听连接的套接字。我想做的是尝试连接时具有接受/拒绝选项。这是我的代码:
private void StartListening()
{
while (running)
{
AcceptingSocket.Listen(100);
Socket client = AcceptingSocket.Accept();
if (IncomingConnection!= null)
{
TcpEventArgs eventArgs = new TcpEventArgs(client);
IncomingConnection(eventArgs);
}
}
}
ѭ1可以检查用户是否要接受或拒绝连接吗?
解决方法
正如@Blindy所说的,您需要接受传入的连接,如果您决定不想继续该连接,则将其关闭。在
Accept
返回之前,您没有对Socket
的引用,因此无法做任何事情来让您根据客户端(例如检查提供的凭据或连接的源地址)。
从客户端的角度来看,一旦他们连接到“ 4”插槽,便建立了连接(操作系统已将连接建立到监听端口,然后在“ 2”呼叫中移交给您)。您不能伪造\'Connection Refused /对方主动拒绝处于侦听状态的Socket
上的连接类型错误。因此,Accept
,然后是Close
,在客户端看来就像as2ѭ中止连接的某种方式一样。
如果您出于编程原因不允许更多连接(例如一次只需要一个客户端),则可以在接受连接后关闭“ 4”套接字,但这通常是一个坏主意。
,您(几乎)总是想要“ 2”连接,因为是否连接的决定只能基于客户端发送的信息(用户名,密码等)来进行。
因此,在建立连接后,请运行授权模块以收集身份验证信息,并根据该信息确定是否在client
上调用Close
(在您的示例中)。