学习、成长之路

  C++博客 :: 首页 :: 联系 :: 聚合  :: 管理
  16 Posts :: 0 Stories :: 27 Comments :: 0 Trackbacks

常用链接

留言簿

我参与的团队

搜索

  •  

最新评论

阅读排行榜

评论排行榜

 

本代码服务端引用了http://www.codeproject.com/KB/IP/IOCP_how_to_cook.aspx中的代码,并作了少量修改,在这里对原作者表示感谢。。

功能描述:
* 封装了心跳机制
* 封装了一层应用层协议,支持压缩传输
* Client端封装了掉线重连机制

示例代码演示了文件传输并输出传输速度
希望朋友们能不吝指教,帮助我进步 :)

点击下载源码

服务端: 

class CMyTcpServer : public CFTcpServer  
{
public:
    CMyTcpServer();
    
virtual ~CMyTcpServer();
    
    
virtual BOOL OnReadF(SCSocket *pSocket, PBYTE pData, DWORD dwLen)
    {
        
static DWORD btCount = 0;
        
static DWORD dwTime = GetTickCount();
        
static DWORD lastTime = dwTime;
        btCount 
+= dwLen;
        HANDLE    hFile 
= CreateFile("c:\\abc.dat", GENERIC_WRITE, FILE_SHARE_WRITE,
            NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
        SetFilePointer(hFile, 
00, FILE_END);
        DWORD dwBytesWrite 
= 0;
        WriteFile(hFile, pData, dwLen, 
&dwBytesWrite, NULL);
        CloseHandle(hFile);        
        
        DWORD dwTTT 
= GetTickCount();
        
if (dwTTT - lastTime > 1000)
        {
            lastTime 
= dwTTT;
            printf(
"%dkb/s %u\n", (int)(((double)btCount) * 1000 / (dwTTT - dwTime) / 1024), btCount);
        }
        
        
return TRUE;
    }
    
virtual int OnConnected(SCSocket *pSocket){return TRUE};
};


int main(int argc, char* argv[])
{
    CMyTcpServer::InitSocketLib();
    CMyTcpServer ts;
    ts.Start(
990850008150000);
    
while!_kbhit() ) ::Sleep(100);
    ts.Stop();
    
return 0;
}

  客户端: 

class CMyTcpClient : public CFTcpClient  
{
public:
    CMyTcpClient();
    
virtual ~CMyTcpClient();
    
    
virtual VOID OnConnected()
    {
        
char buff[BUFF_SIZE_C - 100];
        HANDLE    hFile;
        
        hFile 
= CreateFile("c:\\abc.dat", GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
        DWORD nNumberOfBytesRead 
= 0;
        
int pos = 0;
        
while (ReadFile(hFile, buff, BUFF_SIZE_C - 100&nNumberOfBytesRead, NULL))
        {
            
if (BUFF_SIZE_C - 100 == nNumberOfBytesRead)
                Send(buff, nNumberOfBytesRead);
            
else
                
break;
        }
        CloseHandle(hFile);
        Send(buff, nNumberOfBytesRead, TRUE);
    };
    
virtual int OnReadF(LPSTR pData, int nSize)
    {
        
return TRUE;
    }
};


int main(int argc, char* argv[])
{
    CMyTcpClient::InitSocketLib();
    CMyTcpClient 
*pcl = new CMyTcpClient;
    pcl
->Start("192.168.1.138"9908);
    
while!_kbhit() ) ::Sleep(100);
    
return 0;
}

 


 


posted on 2009-08-13 11:21 sToa 阅读(3865) 评论(2)  编辑 收藏 引用 所属分类: VC

Feedback

# re: 封装一个TCP服务端(IOCP)与客户端[未登录] 2009-08-14 20:56 CC
源代码呢?  回复  更多评论
  

# re: 封装一个TCP服务端(IOCP)与客户端 2009-08-15 14:22 sToa
@CC
这个模板链接没有高亮显示 呵呵 在前面找找 很好找的  回复  更多评论
  


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理