18,356
社区成员
发帖
与我相关
我的任务
分享
DWORD WINAPI CIOCPServer::ThreadConserPoolProc(LPVOID lpParam)
{
//连接主服务器的线程
CIOCPServer* pcs=(CIOCPServer*)lpParam;
WSADATA data = {0};
SOCKET m_Socket;
recvMsg msgg;
TCHAR szBuf[MAX_BUF_SIZE] = {0};
try
{
memset(msgg.sendtype,0,2);
memset(msgg.sendno,0,30);
memset(msgg.seda,0,100);
memset(msgg.sedb,0,100);
memset(msgg.sedc,0,100);
memset(msgg.sedd,0,100);
memset(msgg.sede,0,100);
memset(msgg.sedf,0,100);
memset(msgg.sedg,0,100);
memset(msgg.sedh,0,100);
memset(msgg.sedi,0,100);
if(WSAStartup(MAKEWORD(2, 2), &data))
return FALSE;
if ( LOBYTE(data.wVersion) !=2 || HIBYTE(data.wVersion) != 2 )
{
WSACleanup();
return FALSE;
}
m_Socket = socket(AF_INET , SOCK_STREAM , IPPROTO_TCP);
sockaddr_in server;
server.sin_family = AF_INET;
server.sin_port = htons(9527);
server.sin_addr.s_addr = inet_addr("127.0.0.1");
if (connect(m_Socket, (struct sockaddr *)&server, sizeof(struct sockaddr)) == SOCKET_ERROR )
{
AfxMessageBox(_T("连接失败,请重试!"));
WSACleanup();
return FALSE;
}
pcs->skt=m_Socket;
memcpy(msgg.sendtype, "a", sizeof("a") );
//-----------------unicode下:CString转char[]的方法-------------------------------------
WideCharToMultiByte(CP_ACP,0,pcs->pcno,pcs->pcno.GetLength(),msgg.sendno,sizeof(msgg.sendno),NULL,NULL);
::send(pcs->skt,(char *)&msgg, sizeof(msgg),0);
while(TRUE)
{
memset(szBuf,0,MAX_BUF_SIZE);
recvMsg msggrvd;
memset(msggrvd.sendtype,0,2);
memset(msggrvd.sendno,0,30);
memset(msggrvd.sendskt,0,10);
memset(msggrvd.seda,0,100);
memset(msggrvd.sedb,0,100);
memset(msggrvd.sedc,0,100);
memset(msggrvd.sedd,0,100);
memset(msggrvd.sede,0,100);
memset(msggrvd.sedf,0,100);
memset(msggrvd.sedg,0,100);
memset(msggrvd.sedh,0,100);
memset(msggrvd.sedi,0,100);
int iRet = recv(m_Socket, (char *)szBuf, MAX_BUF_SIZE, 0);
if ( iRet > 0 )
{
memcpy(&msggrvd,szBuf,sizeof(szBuf));
CIcpwes *opw=new CIcpwes(pcs,msggrvd);
QueueUserWorkItem(WorkThreadPoolProc, opw, WT_EXECUTELONGFUNCTION);
}
else
{
// WSACleanup();
memset(szBuf,0,MAX_BUF_SIZE);
CString lstxt;
lstxt="服务器断开连接,请重新启动";
pcs->m_pWnd->SendMessage(WM_ADD_MSG,(DWORD)0,(LPARAM)(LPCTSTR)lstxt);
break;
}
}
closesocket(m_Socket);
return TRUE;
}
catch(_com_error e)
{
CString errormessage;
errormessage.Format(_T("连接数据库失败!\r\n错误信息:%s"),e.ErrorMessage());
AfxMessageBox(errormessage);///显示错误信息
return TRUE;
}
}