服务器用stNonBlocking,客户机ctNonBlocking出错??

sunjiawei2001 2005-03-10 02:22:41
服务器用stNonBlocking,客户机ctBlocking就可以正常通讯了。
我是先发一个integer,测试过了,sendBuf返回0;
Open;
if (Socket.SendBuf(nID,SizeOf(nID))<>SizeOf(nID))then //客户机就这句话出错
Raise Exception.Create('Send ID error');
急哦!!谢谢!
...全文
152 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
xjlqlqlq 2005-03-12
  • 打赏
  • 举报
回复
我的做法是:
在 Open后,用一个循环来判断socket.active ,等 socket存在并连接后再发消息;
open;
when (ClientSocket.Socket=nil) or (ClientSocket.Socket.acitve) do
begin
sleep(200);
//在此可以加上计数,可以作为连接不上的条件;比如:当循环共用1分钟后就认为连接失败,
//不在继续等待了,认为无法连接,结束等待,跳出循环;
end;
ClientSocket.snendbuf(...);
halfdream 2005-03-11
  • 打赏
  • 举报
回复
1。发送数据前先判断连接状态。
2。SENDBUF时候判断返回值
3。对非阻塞SOCKET,上面1,2条件不满足就延时重发。
vinsonshen 2005-03-10
  • 打赏
  • 举报
回复
up
gzmhero 2005-03-10
  • 打赏
  • 举报
回复
你的客户端如果是ctBlocking,Open后,要等待连接建立才返回。
如果是ctNonBlocking,Open马上就返回,此时连接还没有真正建立。
如果是NonBlocking情况下,Open后不能马上处理。
要在OnConnect事件后,连接建立了才能发送接收数据。
解决办法2个:
1、设置成ctBlocking.
2、在OnConnect事件里,
if (Socket.SendBuf(nID,SizeOf(nID))<>SizeOf(nID))then //客户机就这句话出错
Raise Exception.Create('Send ID error');

1,593

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧