Socket 的问题,请各位高手帮帮忙(50分)

  • 主题发起人 xiamei0404
  • 开始时间
X

xiamei0404

Unregistered / Unconfirmed
GUEST, unregistred user!
if socketTmp.SendText('收到<'+Sphone+'>发来的信息:'+Sinfo)<0 then
socketTmp.close;为什么会出错呢??
提示错误如下:
Project ChatRoom.exe raised exception class ESocketError with message
'Windows socket error: 无法立即完成一个非阻挡性套接字操作。 (10038),
on API 'closesocket''. Process stopped. Use Step or Run to continue.

是因为客户端已经与服务器端断开了。。服务器端向已经断开的客户端发信息导致出错

各位发表一下意见怎么解决呢??
 
这段程序是从那个事件中引出的?
如果是在Socket的有些事件中引出就会出问题!
 
当你sendText()出错的时候,TServerSocket 就断开了连接,
我昨天看了VCL原代码
 
我也碰到了这个问题,正在寻找答案!
 
SendText的动作是异步的吧?不能这样顺序判断。
需要在socketTmp的出错过程中进行例外处理。
 
如果你的socket是ServerSocket,那么发送应该用
ServerSocket.Socket.Connection[ConnectionClientSocketIndex].SendText来发送数据
 
to armyjiang:
sendtext 不是异步的
 
你可以先判断客户端是不是还与服务器端连接,如果正连接时你再发送,如果没有该客户

的连接就不发送了也就避免了出错的,,即当客户端连接服务器时,,你先把其连接时的

客户信息保存下来,,当你发送信息时,你可以从你保存的上线信息中查询是不是有你要

发送到的客户端的在线信息,如果有你就发送,, OK!!!!!
 
我已经解决问题了,,我是按CRPP168的思路解决的,,多谢谢大家了
 
顶部