void CServerDlg::OnBoot() 
{
// TODO: Add your control notification handler code here
GetDlgItem(IDC_BOOT)->EnableWindow(false);
GetDlgItem(IDC_SOPT)->EnableWindow(true);
css->OnVersion();   //socket 初始化
css->OnBind();  //
css->OnListen(WM_SOCKET,10,this->m_hWnd);  //WM_SOCKET是一个自定义消息,用一WSAAsyncSelect(),因为消息函数LRESULT CServerDlg::OnSocket(WPARAM wParam,LPARAM lParam)启动后wParam和lParam 的值为0,所以无法启动accpet(),我就不想用消息方试了,所以用多线程.
i=true;
InitializeCriticalSection(&cs);
LPTHREAD_START_ROUTINE lpStartAddress=&ThreadProc;
HANDLE thread=CreateThread(NULL,0,lpStartAddress,(LPVOID)this,0,NULL);   //启动第一个线程
if(thread==NULL)
{
AfxMessageBox("启动线程失败!");
}
else
{
_getch();
CloseHandle(thread);
}
// AfxBeginThread((AFX_THREADPROC)ThreadProc,this);
GetServerState();
}void CServerDlg::GetServerState()
{
// char buff[MAX_PATH];
// getcwd(buff,MAX_PATH);     //得到当前文件路径
if(i==true)
{
m_state="服务启动";
CServerDlg::UpdateData(false);
}
else 
{
m_state="服务停止";
CServerDlg::UpdateData(false);
}
}DWORD CServerDlg::ThreadProc(void* lpname)
{
((CServerDlg*)lpname)->OnThreadAccept();
return 1;
}void CServerDlg::OnSopt()   //停址服务
{
// TODO: Add your control notification handler code here
GetDlgItem(IDC_BOOT)->EnableWindow(true);
GetDlgItem(IDC_SOPT)->EnableWindow(false);
if(i==true)
{
i=false;
GetServerState();
css->OnClose_Socket();
}
}void CServerDlg::GetServerState()
{
// char buff[MAX_PATH];
// getcwd(buff,MAX_PATH);     //得到当前文件路径
if(i==true)
{
m_state="服务启动";
CServerDlg::UpdateData(false);
}
else 
{
m_state="服务停止";
CServerDlg::UpdateData(false);
}
}void CServerDlg::OnThreadAccept()
{
EnterCriticalSection(&cs);
// if(!IsWindow(this->m_hWnd))
css->OnAccept();
css->OnCloseSocket();
// AfxBeginThread(ThreadProc,this);
LeaveCriticalSection(&cs);
InitializeCriticalSection(&cs);
LPTHREAD_START_ROUTINE lpStartAddress=&ThreadProc;
HANDLE thread=CreateThread(NULL,0,lpStartAddress,(LPVOID)this,0,NULL);   //线程2用于连接下一个用户
if(thread==NULL)
{
AfxMessageBox("启动线程失败!");
}
else
{
_getch();
CloseHandle(thread);
}
InitializeCriticalSection(&cs);
LPTHREAD_START_ROUTINE lpStartAddressSend=&ThreadProcSend;
HANDLE ThreadSend=CreateThread(NULL,0,lpStartAddressSend,(LPVOID)this,0,NULL);  //线程3用于发送数据
if(ThreadSend==NULL)
{
AfxMessageBox("启动线程失败!");
}
else
{
_getch();
CloseHandle(ThreadSend);
}
InitializeCriticalSection(&cs);
LPTHREAD_START_ROUTINE lpStartAddressRecv=&ThreadProcRecv;
HANDLE ThreadRecv=CreateThread(NULL,0,lpStartAddressRecv,(LPVOID)this,0,NULL);  //线程4用于接收客服数据
if(ThreadRecv==NULL)
{
AfxMessageBox("启动线程失败!");
}
else
{
_getch();
CloseHandle(ThreadRecv);
}
}DWORD WINAPI CServerDlg::ThreadProcSend(LPVOID lpname)
{
((CServerDlg*)lpname)->ThreadSend();
return 1;
}DWORD WINAPI CServerDlg::ThreadProcRecv(LPVOID lpname)
{
((CServerDlg*)lpname)->ThreadRecv();
return 1;
}void CServerDlg::ThreadSend()
{
EnterCriticalSection(&cs);
if(!IsWindow(this->m_hWnd))
css->SetSend("您好!");
LeaveCriticalSection(&cs);
}void CServerDlg::ThreadRecv()
{
EnterCriticalSection(&cs);
CString str;
css->OnRecv();
str=css->GetRecv();
if(!str)
{
filetext(str);    //收到的数据写入文件
}
LeaveCriticalSection(&cs);
}请问我的程序错在那啊??小第是一个菜鸟。