18,356
社区成员
发帖
与我相关
我的任务
分享
//
m_socket = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if ( m_socket == INVALID_SOCKET )
{
AfxMessageBox(L"create socket : failed !");
return FALSE;
}
// 将套接字绑扎到用户指定端口及默认的接口
m_stSrcAddr.sin_family = AF_INET;
m_stSrcAddr.sin_port = htons (m_iSvrPort);//你定义m_iSvrPort的值 如6000
m_stSrcAddr.sin_addr.s_addr =htonl(INADDR_ANY); //inet_addr(m_strLocalAddr);
int nRet = bind (m_socket, (struct sockaddr FAR *)&m_stSrcAddr, sizeof(struct sockaddr));
if ( nRet == SOCKET_ERROR )
{
AfxMessageBox(L"bind : failed !");
return FALSE;
}
if ( SOCKET_ERROR == listen(m_socket,10) )
{
AfxMessageBox(L"Listen : failed !");
return FALSE;
}
::AfxBeginThread(g_AcceptSvrThread,(LPVOID)&m_socket);
//
//
UINT g_AcceptSvrThread(LPVOID lparam)
{
SOCKET s = *((SOCKET*)lparam);
while ( 1 )
{
DWORD dwCount = ::GetTickCount();
SOCKET acceptSock;
SOCKADDR_IN addr;
int iLen = sizeof(SOCKADDR_IN);
acceptSock = accept(s, (SOCKADDR*)&addr, &iLen);
if (INVALID_SOCKET == acceptSock)
{
closesocket(acceptSock);
return -1;
}
::AfxBeginThread(g_FileSvrThread,&acceptSock);
dwCount = ::GetTickCount() - dwCount ;
if ( dwCount > 1000 )//这里写的1000ms,看你的情况了
{
continue;
}
else
{
Sleep(1000-dwCount);
}
}
return 0;
}
//
UINT g_FileSvrThread(LPVOID lparam)
{
// AfxMessageBox(L"g_FileSvrThread begin!");
CString str = L"";
SOCKET Sock = *((SOCKET*)lparam);
CString strMsg = L"";
bool bConnected = true;
while ( 1 )
{
DWORD dwCount = GetTickCount();
int iRet = 0;
//这里写recv代码
// CMD cmd;
// memset(&cmd, 0 ,sizeof(cmd));
// iRet = recv(Sock, (char*)&cmd, sizeof(cmd), 0);
// if ( iRet <= 0 )
// {
// bConnected = false;
// }
//recv完后,可以用内存中的数据写入文件了。
//file write ,hehe
//TRACE("接收过程结束,要接受的大小%d,剩余大小%d\n", iSize, iLeft);
if ( !bConnected )
break;
}
closesocket(Sock);
return 0;
}