SOCKET API的RECV

goto_code 2009-10-16 10:10:23
RECV函数使用需要线程的吧
如何创建一个线程来使用recv呢?能否给点基本代码呢
谢谢
...全文
110 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
kfcoffe 2009-10-16
  • 打赏
  • 举报
回复
RECV函数不要用线程吧。
bdmh 2009-10-16
  • 打赏
  • 举报
回复
和普通线程一样,就是把socket的接受发送等写到线程里
单个socket也可以分阻塞式和非阻塞式
shuihan20e 2009-10-16
  • 打赏
  • 举报
回复
new->thread object
goto_code 2009-10-16
  • 打赏
  • 举报
回复

void TForm1::fun_SendCom(SOCKET st,unsigned char sendbuf[256],int sendlen)
{
unsigned char recvbuf[256];
memset(recvbuf,0,256);
int recvlen =strlen(recvbuf) ;
if (send(st,sendbuf,sendlen,0) == sendlen)
{
DisplaySendDataA(sendbuf,sendlen,true);
fd_set fds;
struct timeval tv;
FD_ZERO(&fds);
tv.tv_sec = 1;
tv.tv_usec = 0;
FD_SET(st, &fds);
int result = 0;
Application->ProcessMessages();
Sleep(1);

for (int i=0;i<2;++i)
{
if (select(0, &fds, NULL, NULL, &tv)>0)
{
// int ret = ioctlsocket(sClient,FIONREAD,&hasread);
result += recv(st,recvbuf+result,recvlen-result,0);
if (!result || recvbuf[result-1]==0)
break;
else
{
FD_ZERO(&fds);
tv.tv_sec = 1;
tv.tv_usec = 0;
FD_SET(st, &fds);
Application->ProcessMessages();
Sleep(100);
}
}
else
break;
}
DisplaySendDataA(recvbuf,strlen(recvbuf),false);

}
}
//---------------------------------------------------------------------------

请问以上代码为什么没有recv到值呢?确定的是发送出去了,且数据正确。
chinezwq 2009-10-16
  • 打赏
  • 举报
回复
监听端口,如果有消息,就创建一个线程,然后在这个线程里面进行recv处理,哈哈

1,593

社区成员

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

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