在线程中使用SOCKET编程为什么收不到信息?

chinalhx 2004-03-18 04:36:27
您好:
我使用SOCKET编程,用recv函数接受字符串,因为不知道何时数据到达缓冲区,所以我另外使用一个线程,在那边不停地接受,如果数据到,则显示。函数如下:
UINT getmsg(LPVOID mss)
{
ms * msss =(ms *)mss;
static SOCKADDR clientaddr;
static int sizeclient = sizeof(clientaddr);
static SOCKET clientSock ;
static bool accepted = false;

char buf[13];
while (1)
{
if (!accepted){
clientSock = accept(msss->servSock,(SOCKADDR *)&clientaddr, &sizeclient);
if (clientSock == INVALID_SOCKET) break;
accepted = true;
}
else{
if ((recv(clientSock, buf, sizeof(buf), 0))>0 )
msss->plist->AddString(buf);
}
}
return 0;
}
不知道怎么搞得,上面的代码放在线程中没有收到任何数据,但是放在主程序中就能收到数据,为什么呢?
还有,如果我定义缓冲区为13,发送13各字符,怎么接受到的13字符后面总有乱码(定义几个字符都一样)?
参数结构stru.plist = &(this->m_list);
stru.servSock = servSock;

有什么方法能够通知应用程序,数据到达了呢,以及连续接收数据?
...全文
83 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
COM_MOC 2004-03-18
  • 打赏
  • 举报
回复
1.判断数据是否到来可以用select()方法检测clientsock是否可读,然后再接收。
2.在线程中没有收到数据可以是那个线程还没有起来,在创建线程的那个地方sleep一下可能会收到一些。另外建议看看WaitForSingleObject()方法,也可能有点用。
3.buf缓冲区使用之前先清空。另外如果接收13个字节,声明buf[14]看看!

4,358

社区成员

发帖
与我相关
我的任务
社区描述
通信技术相关讨论
社区管理员
  • 网络通信
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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