18,356
社区成员
发帖
与我相关
我的任务
分享
BOOL CAsyncSocket::AsyncSelect(long lEvent)
{
ASSERT(m_hSocket != INVALID_SOCKET);
_AFX_SOCK_THREAD_STATE* pState = _afxSockThreadState;
ASSERT(pState->m_hSocketWindow != NULL);//////////这就是337行
return WSAAsyncSelect(m_hSocket, pState->m_hSocketWindow,
WM_SOCKET_NOTIFY, lEvent) != SOCKET_ERROR;
}
struct SAVEFILEPARAM
{
SOCKET sock;
CTalkDlg* pDlg;
};
struct SENDFILEPARAM
{
CString pathName;
CString ip;
char fileName[NAMELENGTH];
CTalkDlg* pDlg;
};//2个结构体用于传文件
//////////////// 接收文件线程 ////////////////
UINT SaveFileSingle( LPVOID param )
{
SAVEFILEPARAM sp;
sp.pDlg=((SAVEFILEPARAM*)param)->pDlg;
sp.sock=((SAVEFILEPARAM*)param)->sock;
CSocket sock;
sock.Attach( sp.sock );//接收线程的前几行,就是调试到这里终止的。
.................//其他代码
}
//////////////// 监听有无文件传输连接。.. /////////////////
UINT ListenFileTransport( LPVOID param)
{
CTalkDlg* pCLAN=(CTalkDlg*)param;
CSocket sockServer;
if (!AfxSocketInit())
{
AfxMessageBox("ListenFileTransport AfxSocketInit( )失败。");
return 0;
}
if( 0==sockServer.Create( FILEPORT ) )
{
AfxMessageBox("监听套接字创建失败。");
return 0;
}
if( 0==sockServer.Listen( ) )
{
AfxMessageBox("监听套接字监听失败。");
sockServer.Close( );
return 0;
}
//监听套接字等待连接请求。
while( true )
{
CSocket sockClient;
if( 0==sockServer.Accept( sockClient ) )
{
AfxMessageBox("监听套接字接受服务失败。");
sockServer.Close( );
break ;
}
//用线程函数来接收文件。
/////////////////////////////////////////////////////////////////////////////
SAVEFILEPARAM param;
param.sock=sockClient.Detach( );
param.pDlg=pCLAN;
AfxBeginThread(SaveFileSingle,(LPVOID)¶m);
//////////////////////////////////////////////////////////////////////////////
}
sockServer.Close( );
return 0;
}
//还有就是在OnInitDialog里面开启监听线程的代码:
AfxBeginThread(ListenFileTransport,this);//