多线程的socket错误

lwglucky 2001-06-11 08:33:00
我的程序在一个dll中,如果不用多线程,socket正确,但是我希望socket的recv和send分别放在各自单独的线程中,程序无法接受发送数据.请问这是什么原因.
DWORD ClientSendThd(LPVOID lpParam)
{ SOCKET p_trsocket=(SOCKET)lpParam;
timeval timeout;
memset(&timeout,0,sizeof(timeout));
timeout.tv_sec=5;
ASSERT(p_trsocket/*->toClientSocket!*/=INVALID_SOCKET);
while (true)
{char vv[]="lwg";
int tt=send(p_trsocket/*->toClientSocket*/,vv,sizeof(vv),0);
if (tt==SOCKET_ERROR )
{
CString strerror;
strerror.Format("%i",WSAGetLastError());
printf(strerror);
}
return 1;
}

extern "C" __declspec(dllexport) BOOL InitSocket()
{
.....初始化m_socket.....
.....socket , bind ,listen.....略
u_long arg=0;
tcpclientsocket[nowtcpsocket]=new CTwiSocket();
SOCKET toClientSocket=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
toClientSocket=accept(m_socket,
(sockaddr*)&addr,
&addrlen);
if (toClientSocket!=INVALID_SOCKET)
{
CreateThread( 0,0,
(LPTHREAD_START_ROUTINE)ClientSendThd,
(LPVOID)(toClientSocket),0,&dw2);
}
...................................
...全文
50 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
huangbeyond 2001-06-11
  • 打赏
  • 举报
回复
API+多线程来实现WINSOCKET,需要在:
线程中有窗口作为载体,否则,和单线程无区别。

解决办法:
1。单纯使用MFC。可以实现,CSOCK内嵌了CWND;
2。单纯使用API。
混合模式,实现完全意义上的多线程,十分困难。

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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