vb.net 或 c# 如何在 socket 中有条件的 Accept 连接?

以前用 VB 的时候,使用 Winsock 控件,可以在 ConnectionRequest 中编写代码,来决定是否接受客户端的连接。现在用 VB.NET 的时候发现只有一个 accept 方法来接受客户端的连接。不可以实现在接受连接前判断一些条件来决定是否接受该连接。请问,我该如何实现上述功能??

第1个回答  2013-09-15
先连接 在获取到连接以后用AcceptSocketClient得到一个socke对象 用这个来判断对方的IP是否负荷你的黑名单 具体根据什么 你可以再接着问追问

你好,根据你的建议,我理解为先 Accept 客户端的连接请求,再根据 socket 的属性判断客户端的身份,如果不符合的话就断开,是这样吗?可我想实现的功能是,在 Accept 之前就做一些判断,这个判断是与客户端的身份无关的(比如服务器目前的负载等等),如果判断结果为 True ,再 Accept 客户端,否则的话直接跳过 Accept 而拒绝客户端连接。

追答

看附件里面的唯一一行注释

之前判断一下负载 如果可以连接就进入到while 线程监听

否则就不会进入到

追问

很感谢你的回答,可能我的要求比较特殊我没有说清楚,简单的说,就是想实现在 Accept 前对请求队列中的连接进行预筛选,筛选条件比较复杂,包括本机的一些参数,还有广域网中的一些参数等等,并不是单纯的服务器负载判断,所以,根据条件来设置是否 Listen 这种方法不太适合。归根结底,就是想对连接请求队列进行访问和修改。

追答

那你就异步socket连接好了 里面有连入事件的 我给你的是同步

追问

试了一下 BeginAccept 和 AcceptAsync …… 没成功~ 可以给点思路吗?先谢过~

追答

我一般不同异步 我习惯用线程 那你用异步的话 还是在beginAccept里面判断啊

追问

好的,我再试试,谢谢~

追答

这个beginAccept就跟form_load函数是一个意思
因为我不怎么喜欢用异步的 觉得同步仅仅是有一个阻塞 异步是相当于系统托管了 区别不大 而且很多人对异步有一种害怕的赶脚 我就是的 同步+线程 显得更容易读懂对于初学者来说的话

相似回答