刚学这个控件
小弟先要声明一下 程序无任何问题,能够实现预计的所有功能
我想知道事件CONNECT和ConnectionRequest的响应顺序
我的理解是connect事件是在连接成功后响应,而ConnectionRequest是在客户端请求连接时响应的
但是我在调试的时候出现了一个问题程序是MSDN中的那个简单的聊天程序1、先用逐语句调试,在我按下连接按钮(connect方法)后,ConnectionRequest先响应,执行完后,也不执行connect
事件了,就这样停下不动了。2、用中断调试,分别在connect和ConnectionRequest两处设下断点,运行,它们的顺序是先响应
connect,再ConnectionRequest。3、当我服务端不接受requestid时,用中断,顺序是先ConnectionRequest,再connect,再CLOSE(事件)。用逐语句时却不会响应connect事件为什么两次调试,这两个事件响应的顺序会不同?
connect事件到底在什么时候才响应?是怎么个回事?
希望各位能讲解具体点。谢谢了!

解决方案 »

  1.   

    你这个问题估计是。你的程序是UDP的,也就是说自己即使服务端又是客户端,这样当你的程序作为客户端,即请求连接时,由于你本身也是服务端所以,你的ConnectionRequest链接请求时间相应,而这个时候由于connect他得链接成功的时候才相应,就这个原因。
    也不执行connect事件了,就这样停下不动了。这个是由于你没有对链接请求作出及时的应答,所以线程处于等待状态。
    这个程序跟踪最好不用设置断点的方法,用debug打印出一个诊断信息即可
      

  2.   

    谢谢 不过我的程序是TCP的 
      

  3.   

    还有一个是 我用中断方法是为了看看这两个事件到底是谁先响应,既然connect事件是在连接成功的时候才响应
    那么用中断的方法调试也应该是 ConnectionRequest 再connect啊!最郁闷的是两种调试方法 这个两个
    事件的响应顺序不一样!
      

  4.   

    哈哈。犯了个可笑的错误。UDP的有不用connect啊。
    以前用的时候,就直接调用connect了,好像没在connect里面写过代码-_-!!!
    关注一下
      

  5.   

    有没有搞错呀,ConnectionRequest 事件是服务端用的,Connect 事件是客户端用的,怎么会有执行顺序之分。
    TCP/IP协议最基本的架构就是 C/S 结构,即:客户/服务 架构
    所以分为客户端和服务器端的应用。
    如果用Winsock控件使用TCP/IP连接的过程是这样的:
    首先Winsock控件需要两个,一个是做服务端S,一个是客户端C
    在服务端中不会有客户端的Connect事件产生,而客户端中也不会有服务端的ConnectionRequest事件产生。S(服务端)先设置好侦听端口,然后开始侦听C(客户端)设置要连接的远程服务端IP地址和端口,然后用Winsock的Connect方法向服务端提出连接请求。这时S(服务端)将会产生 ConnectionRequest 事件,表示收到了客户端的连接请求,
    这时S(服务端)可根据对方的IP地址或MAC地址之类的信息决定是否与客户端进行连接,
    如果决定连接,可用Accept方法与客户端连接,否则可以用Close方法断开连接。如果S(服务端)使用了Accept方法与C(客户端)连接后,C(客户端)会发生Connect事件,表示与服务端连接成功。然后就可以进行通讯了。
      

  6.   

    楼上这位大哥,你去MSDN上复制个程序,调试一下看看,肯定有个顺序之分的
      

  7.   

    不知道你什么概念,我看MSDN看得够多了。
    也没见过服务端的Winsock响应Connect事件,
    客户端的Winsock更加不会响应ConnectionRequest事件。
    顺序之分?不知道你怎么来的。
    你到底理不理解用TCP/IP网络通讯是什么回事?
    C/S架构就是分为两个部分的。
    要不你用的可能是控件数组,一个用来做服务,一个用来做客户
    一个Winsock不可能有这样的事件顺序出现。
      

  8.   

    呵呵 可能是我没说清楚,我只是在调试,所以客户端和服务端都在一台机子上,两个在一起,connect在客户端上响应,ConnectionRequest
    在服务端响应,也就是说我在客户端执行connect方法以后,先响应服务端的ConnectionRequest事件,再返回到
    客户端响应connect事件
      

  9.   

    看看我6楼的内容,很清楚的说明了整个C/S成功建立连接的流程。
    如果服务器端不在ConnectionRequest事件中使用Accept方法与客户端连接,
    根本就没法得到套接字与客户端进行连接,所以客户端所谓连接成功事件决定于
    服务器是否使用Accept方法接受客户端连接。
    所以客户端的Connect事件的响应肯定在服务器端的ConnectionRequest事件之后。
      

  10.   

    这个MSDN里有写 我也知道,但我遇到的这个问题又做何解释呢?真的是想不通
      

  11.   

    我在多年的使用的经验中,WinSock控件事件这个问题理论和实际情况是一样的。
    至于你的程序为什么会有这种现象,具体的只有你才知道,有可能你调试的时候
    客户端连接到别的地方或端口也不一定,这个很难说。