L labafa Unregistered / Unconfirmed GUEST, unregistred user! 2001-11-12 #1 我用socket,当connected之后不能立即发送消息, 也就是说不能做到在同一procedure中先connect,然后立即发送消息。
S Sachow Unregistered / Unconfirmed GUEST, unregistred user! 2001-11-13 #3 不会把,把服务器端和客户端的ServiceType都设成stNonBlocking看看?(实际上默认的 就是stNonBlocking了),把情况再描述清楚一点,你都用了哪些事件?
N newsweep Unregistered / Unconfirmed GUEST, unregistred user! 2001-11-13 #4 我認為不必要寫在一起 你在Form的OnCreate中讓其連接 然後在ClientSocket的OnConnect中 發送消息不行嗎? 我已測試通過呢
L labafa Unregistered / Unconfirmed GUEST, unregistred user! 2001-11-13 #5 比如说:在一个无需时时连接的程序里,想在需要发消息的时候连接一下,然后就断开。
光 光子 Unregistered / Unconfirmed GUEST, unregistred user! 2001-11-13 #7 在连接之后发送要检查一下状态,我如下描述:(不是代码) socket.connect(ip); start_time:=get_cur_time(); while get_cur_time()-start_time<time_out_value and socket.stat<>connected do application.processmessage; if socket.stat=connected then socket.send(msg) else error('connect error');
在连接之后发送要检查一下状态,我如下描述:(不是代码) socket.connect(ip); start_time:=get_cur_time(); while get_cur_time()-start_time<time_out_value and socket.stat<>connected do application.processmessage; if socket.stat=connected then socket.send(msg) else error('connect error');
L labafa Unregistered / Unconfirmed GUEST, unregistred user! 2001-11-14 #8 谢谢光子, 一般time_out_value设定为多大的数值比较好?
光 光子 Unregistered / Unconfirmed GUEST, unregistred user! 2001-11-15 #9 居然你把我的“天书”給看看懂了呀,好样的!(看你这么聪明我多说几句) time_out_value的具体值要根据具体情况设定,主要是看你在LAN使用呢还是在 Internet上使用,看你是使用的域名格式地址呢,还是IP格式的地址。也还 要看你的策略,如果是让尽可能都连上,那么就设置大点,如果是保证连接速度,也可 以设置小点。一般情况下,如果不解析域名,成功连接正常情况下能在1秒以内完成, 最多也是几秒,如果解析域名会稍微慢些。
居然你把我的“天书”給看看懂了呀,好样的!(看你这么聪明我多说几句) time_out_value的具体值要根据具体情况设定,主要是看你在LAN使用呢还是在 Internet上使用,看你是使用的域名格式地址呢,还是IP格式的地址。也还 要看你的策略,如果是让尽可能都连上,那么就设置大点,如果是保证连接速度,也可 以设置小点。一般情况下,如果不解析域名,成功连接正常情况下能在1秒以内完成, 最多也是几秒,如果解析域名会稍微慢些。
R RockIsDead Unregistered / Unconfirmed GUEST, unregistred user! 2004-02-20 #12 Blocking(阻塞) 在windows环境中,多任务是以循环方式来处理的(称为Event Dispatch Loop),循 环中会一直处理执行GetMessage及DispatchMessage函数,GetMessage用以从系统队列(System Queuing)中取得下一个消息窗口,而DispatchMessage则是将消息宙口交由Windows Procedure(WinProc)来处理。 但若当GetMessage无法正常执行以至于Windows Procedure一直被Queue侧住时,则 会生成所谓的“阻塞”。 为了避免winsockd的socket被程序一直阻塞住,而无法处理(例如结束Socket), 可利用WSAIsBlocking函数,检查Socket是否正在被阻塞住,若返回true值,表示Socket 正被阻塞住,此时便可利用WSACancelBlockingCall函数,删除被阻塞的socket。
Blocking(阻塞) 在windows环境中,多任务是以循环方式来处理的(称为Event Dispatch Loop),循 环中会一直处理执行GetMessage及DispatchMessage函数,GetMessage用以从系统队列(System Queuing)中取得下一个消息窗口,而DispatchMessage则是将消息宙口交由Windows Procedure(WinProc)来处理。 但若当GetMessage无法正常执行以至于Windows Procedure一直被Queue侧住时,则 会生成所谓的“阻塞”。 为了避免winsockd的socket被程序一直阻塞住,而无法处理(例如结束Socket), 可利用WSAIsBlocking函数,检查Socket是否正在被阻塞住,若返回true值,表示Socket 正被阻塞住,此时便可利用WSACancelBlockingCall函数,删除被阻塞的socket。
M masm Unregistered / Unconfirmed GUEST, unregistred user! 2004-02-20 #13 非阻塞模式下当然不能做到在同一procedure中先connect,然后立即发送消息,先connect,然后在onconnect事件中发送,这个事件说明网络已经连接。 工作原理: 一、非阻塞模式 1、connect <--socket连接服务器 2、send <--立刻执行这条语句,但实际上socket还没建立连接呢,应当在onconnect事件中send 3、onerror事件 <--如果connect错误,则激发这个事件 二、阻塞模式 try connect(500) <--在500毫秒内必须连接;程序在这里阻塞了 send <--500毫秒内成功建立连接,则运行这条语句 except ...<--500毫秒内没建立连接,则失败
非阻塞模式下当然不能做到在同一procedure中先connect,然后立即发送消息,先connect,然后在onconnect事件中发送,这个事件说明网络已经连接。 工作原理: 一、非阻塞模式 1、connect <--socket连接服务器 2、send <--立刻执行这条语句,但实际上socket还没建立连接呢,应当在onconnect事件中send 3、onerror事件 <--如果connect错误,则激发这个事件 二、阻塞模式 try connect(500) <--在500毫秒内必须连接;程序在这里阻塞了 send <--500毫秒内成功建立连接,则运行这条语句 except ...<--500毫秒内没建立连接,则失败