MFC局域网文件传输server端

本文详细介绍了CFileServer类的实现方法,包括初始化服务器、创建监听线程以及处理客户端连接等核心步骤。通过具体代码展示了如何使用socket进行网络通信。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

// FileServer.cpp: implementation of the CFileServer class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "FeiQ.h"
#include "FileServer.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CFileServer::CFileServer()
{

}

CFileServer::~CFileServer()
{

}
//server
BOOL CFileServer::InitServer( )
{   //创建socket
    m_SvrSocket = socket( AF_INET, SOCK_STREAM, 
        IPPROTO_TCP );
    if( INVALID_SOCKET == m_SvrSocket )
    {
        return FALSE;
    }

    //绑定IP和端口
    SOCKADDR_IN addr = { 0 };
    addr.sin_family  = AF_INET;
    addr.sin_port    = htons( PORT_FILESVR );
    addr.sin_addr.S_un.S_addr = htonl( INADDR_ANY );
    bind( m_SvrSocket, (SOCKADDR *)&addr, 
        sizeof( addr ) );

    //侦听
    listen( m_SvrSocket, 5 );

    //创建等候客户的线程
    AfxBeginThread( FileThread, this );

    return TRUE;
}

UINT CFileServer::FileThread( LPVOID pParam )
{
    CFileServer * pThis = ( CFileServer * )pParam;
    while( 1 )
    {   //等候客户端的连接
        SOCKADDR_IN clientaddr = { 0 };
        int nLen = sizeof( clientaddr );
        SOCKET clientsock = accept( 
            pThis->m_SvrSocket, 
            (SOCKADDR *)&clientaddr, &nLen );
        if( INVALID_SOCKET == clientsock )
        {
            continue;
        }
        //处理客户端的连接
        CHAR * pszIP = inet_ntoa( clientaddr.sin_addr );
        pThis->OnConnect( clientsock, pszIP );
    }

    return 0;
}

#include "FileThread.h"

void CFileServer::OnConnect( SOCKET clientsock, 
                             LPSTR pszID )
{   //创建线程并挂起
    CFileThread * pThread = ( CFileThread * )
        AfxBeginThread( RUNTIME_CLASS( CFileThread ),
        THREAD_PRIORITY_NORMAL, 0, CREATE_SUSPENDED );
    //设置参数
    pThread->SetSocket( clientsock, pszID );
    //开始线程
    pThread->ResumeThread( );
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值