刚学这个控件
小弟先要声明一下 程序无任何问题,能够实现预计的所有功能
我想知道事件CONNECT和ConnectionRequest的响应顺序
我的理解是connect事件是在连接成功后响应,而ConnectionRequest是在客户端请求连接时响应的
但是我在调试的时候出现了一个问题程序是MSDN中的那个简单的聊天程序1、先用逐语句调试,在我按下连接按钮(connect方法)后,ConnectionRequest先响应,执行完后,也不执行connect
事件了,就这样停下不动了。2、用中断调试,分别在connect和ConnectionRequest两处设下断点,运行,它们的顺序是先响应
connect,再ConnectionRequest。3、当我服务端不接受requestid时,用中断,顺序是先ConnectionRequest,再connect,再CLOSE(事件)。用逐语句时却不会响应connect事件为什么两次调试,这两个事件响应的顺序会不同?
connect事件到底在什么时候才响应?是怎么个回事?
希望各位能讲解具体点。谢谢了!
小弟先要声明一下 程序无任何问题,能够实现预计的所有功能
我想知道事件CONNECT和ConnectionRequest的响应顺序
我的理解是connect事件是在连接成功后响应,而ConnectionRequest是在客户端请求连接时响应的
但是我在调试的时候出现了一个问题程序是MSDN中的那个简单的聊天程序1、先用逐语句调试,在我按下连接按钮(connect方法)后,ConnectionRequest先响应,执行完后,也不执行connect
事件了,就这样停下不动了。2、用中断调试,分别在connect和ConnectionRequest两处设下断点,运行,它们的顺序是先响应
connect,再ConnectionRequest。3、当我服务端不接受requestid时,用中断,顺序是先ConnectionRequest,再connect,再CLOSE(事件)。用逐语句时却不会响应connect事件为什么两次调试,这两个事件响应的顺序会不同?
connect事件到底在什么时候才响应?是怎么个回事?
希望各位能讲解具体点。谢谢了!
也不执行connect事件了,就这样停下不动了。这个是由于你没有对链接请求作出及时的应答,所以线程处于等待状态。
这个程序跟踪最好不用设置断点的方法,用debug打印出一个诊断信息即可
那么用中断的方法调试也应该是 ConnectionRequest 再connect啊!最郁闷的是两种调试方法 这个两个
事件的响应顺序不一样!
以前用的时候,就直接调用connect了,好像没在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事件,表示与服务端连接成功。然后就可以进行通讯了。
也没见过服务端的Winsock响应Connect事件,
客户端的Winsock更加不会响应ConnectionRequest事件。
顺序之分?不知道你怎么来的。
你到底理不理解用TCP/IP网络通讯是什么回事?
C/S架构就是分为两个部分的。
要不你用的可能是控件数组,一个用来做服务,一个用来做客户
一个Winsock不可能有这样的事件顺序出现。
在服务端响应,也就是说我在客户端执行connect方法以后,先响应服务端的ConnectionRequest事件,再返回到
客户端响应connect事件
如果服务器端不在ConnectionRequest事件中使用Accept方法与客户端连接,
根本就没法得到套接字与客户端进行连接,所以客户端所谓连接成功事件决定于
服务器是否使用Accept方法接受客户端连接。
所以客户端的Connect事件的响应肯定在服务器端的ConnectionRequest事件之后。
至于你的程序为什么会有这种现象,具体的只有你才知道,有可能你调试的时候
客户端连接到别的地方或端口也不一定,这个很难说。