一个关于TClientSocket的问题???谁能回答我????

wpk 2002-06-17 09:38:37
TClientSocket的OnConnect事件中用SendBuff()发送一个数据包,服务器端(UNIX)在收到这个包后发送了一个包给客户端,然后主动关闭这个连接,
客户端的TClientSocket立刻触发了OnRead事件,但是ReceiveBuff返回的值总是为-1???为什么??
eg:
TClientSocket::OnRead()
{
int iRead = Socket->ReceiveBuff()
// iRead = -1????
}
TClientSocket::OnConnect()
{
int iSend = Socket->SendBuff()
//iSend >0!!!!
}
TClientSocket::OnError()
{
Socket->Close()
ErrorCode = 0
}
...全文
51 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
wyb_Ultra 2002-06-18
  • 打赏
  • 举报
回复
你如果用非阻塞方式,发送方可以直接用SendStream传送文件,接收方没有ReceiveStream。
在OnRead中写一下语句:
char Buffer[1000];
TMemoryStream *myStream;
int n;
do
{
n = Socket -> ReceiveBuf(Buffer, sizeof(Buffer));
if (n <= 0)
break;
else
{
myStream -> Write(Buffer, n);
Sleep(200);//按实际情况写延时
}
} while(true);

iec 2002-06-17
  • 打赏
  • 举报
回复
用Socket->ReceiveText()
jianlinlong 2002-06-17
  • 打赏
  • 举报
回复
不可能吧!为什么不用ReceiveText()试试?
gk0205 2002-06-17
  • 打赏
  • 举报
回复
你的代码能编译通过。
你用的是ms出的bcb哦。

int __fastcall ReceiveBuf(void *Buf, int Count);
!!!!你眼睛不好??
wpk 2002-06-17
  • 打赏
  • 举报
回复
我看到BCB帮助的文档中说OnRead不一定能收到全部的字符,在要在DISCONNECT事件中处理,但是我在DISCONNECT事件中用ReceiveBuff收数据,程序提示堆栈溢出,异常中止!!
书生 2002-06-17
  • 打赏
  • 举报
回复
Mark@_@

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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