您的位置:程序门 -> vc/mfc -> 网络编程



很紧急,求问高手为何在线程中为何无法发送tcp信息


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


很紧急,求问高手为何在线程中为何无法发送tcp信息
发表于:2008-01-18 00:38:09 楼主
void   cserverdlg::senddata()
{
// updatedata(true);
// send(connectsocket,m_szbuffer,m_nlength,msg_dontroute);
if(m_targetsocket.m_ntargetconnected)
{
//m_targetsocket.m_ntargetlength=nrecvcount;
m_targetsocket.m_ntargetlength=3;
//m_msg.replacesel(recvbuf);
memcpy(m_targetsocket.m_sztargetbuffer,"123",sizeof(m_targetsocket.m_sztargetbuffer));
m_info.replacesel(m_targetsocket.m_sztargetbuffer);
m_targetsocket.asyncselect(fd_write);
}
}


uint   serverudpthread(lpvoid   pparam)
{
// cserverdlg*   pdlg=(cserverdlg*)pparam;
cserverapp*   papp=(cserverapp*)afxgetapp();
cserverdlg*   pdlg=(cserverdlg*)papp-> m_pmainwnd;
pdlg-> m_msg.replacesel("开始监听");
int   nsockerr;
cstring   str="";
sockaddr_in       addrcli;  
int     len=sizeof(sockaddr);  

memset(recvbuf,0,sizeof(recvbuf));
nrecvcount=0;
word   wversion;
wsadata   wsadata;
int   err;
wversion=makeword(1,1);
err=wsastartup(wversion,&wsadata);
if(err!=0)
{
pdlg-> m_msg.replacesel("error");
return   0;
}
socket   serversocket=socket(af_inet,sock_dgram,0);
sockaddr_in   addr;
addr.sin_family=af_inet;
addr.sin_addr.s_addr=htonl(inaddr_any);
addr.sin_port=htons(m_uport);
if(bind(serversocket,(struct   sockaddr*)&addr,sizeof(addr))==socket_error)
{
pdlg-> m_msg.replacesel("error");
nsockerr=wsagetlasterror();
}
while(m_brun)
{
memset(recvbuf,0,sizeof(recvbuf));
nrecvcount=recvfrom(serversocket,recvbuf,100,0,(sockaddr*)&addrcli,&len);  
if(m_brun)
{
if(nrecvcount==socket_error)
{
nsockerr=wsagetlasterror();
}

else
{
if(nrecvcount> 0)
{
pdlg-> m_msg.replacesel(recvbuf);
str.format("%d",nrecvcount);
pdlg-> m_msg.replacesel(str);
pdlg-> senddata();
pdlg-> onbtnsend();

/*
cstring   str1;
int   time=0;
for(int   m=0;m <nrecvcount;m++)
{
//str1=str1+recvbuf[m];
str1.format("%x",recvbuf[m]);
str=str+str1+"   ¦   ";
time++;
if(time==10)
{
time=0;
plist-> insertstring(n_index,str);
str="";
n_index++;
}

}
//str.format("%x---%d",str1,nrecvcount);
*/
}
}

}
}
closesocket(serversocket);
wsacleanup();
getchar();
pdlg-> m_msg.replacesel("结束侦听");
return   0;
}


为什么在线程中调用了senddata()
但是senddata()函数中什么都执行就最后最关键的)m_targetsocket.asyncselect(fd_write);执行
很紧急啊。


快速检索

最新资讯
热门点击