静态连接为什么会出错? 高手帮忙
kvk 2002-05-04 09:11:04 分数不是问题,各位高手帮帮忙
线程函数里的代码,以动态连接没问题,静态就出问题了
CRealMsg *msg=(CRealMsg*)p;
CString strip;
strip.Format("%s",msg->strIP);
strip.TrimRight();
CCriticalSection sec;
sec.Lock();
CSendSock revsock;
revsock.Create(htons(9999),SOCK_DGRAM,0);//这里出错//ACCESS VOLATION
revsock.Bind(htons(9999),strip);
sec.Unlock();
//revsock.AsyncSelect(0);
/*
sockaddr_in addr;
addr.sin_family=AF_INET;
addr.sin_port=htons(9999);
addr.sin_addr.s_addr=inet_addr(strip);
revsock=socket(AF_INET,SOCK_DGRAM,0);
if(revsock==INVALID_SOCKET)
{AfxMessageBox("create failed");return 1;}
if(SOCKET_ERROR==bind(revsock,(const sockaddr*)&addr,
sizeof(addr)))
{AfxMessageBox("bind failed");return 1;}
DWORD value=1000;
ioctlsocket(revsock,FIONBIO,&value);
char* name;
name=inet_ntoa(addr.sin_addr);
CString strfff;
strfff.Format("%s",name);
AfxMessageBox(strfff);
*/
//bool bb=true;
//::setsockopt(revsock,SOL_SOCKET,SO_BROADCAST,(char*)&bb,sizeof(bool));
CRealMsg *pmsg=new CRealMsg;
int nrev=0;
sec.Lock();
CMainFrame* pMain=(CMainFrame*)AfxGetMainWnd();
ASSERT(pMain);
sec.Unlock();
//int nlen=sizeof(addr);
while(!nReQuery)
{
nrev=revsock.Receive(pmsg,sizeof(CRealMsg));//recv(revsock,(char*)pmsg,sizeof(CRealMsg),0);//revsock.Receive((void*)pmsg,sizeof(CRealMsg));
if(SOCKET_ERROR==nrev||nrev==0)
{
DWORD dError=GetLastError();
//ReportError(dError);
continue;
}
else
{
if(strcmp(pmsg->strMess,"logo")==0)
{
pMain->SendMessage(WM_ADDUSER,(WPARAM)(pmsg),0);
}
else if(strcmp(pmsg->strMess,"ungo")==0)
{
pMain->SendMessage(WM_DELUSER,(WPARAM)pmsg,0);
}
ZeroMemory(pmsg,sizeof(CRealMsg));
}
}
::closesocket(revsock.m_hSocket);
delete pmsg;
delete msg;
return 1;
}