2008年1月15日

WSAEVENTSELECT模型,局限性很大受WINDOWS操作系统限制WSA_MAXIMUM_WAIT_EVENTS最大为64!也就是连接超过64就需要重新开启新的线程去执行!以下是简单版最大支持64个连接!只是一个简单学习的例子VS2005测试通过!其模型设计难度也比较大!不是非常推荐使用!目前5种模型中各有所长!我还在寻找它的优点!希望有知道的人能留言告诉我嘿嘿!
int _tmain(int argc, _TCHAR* argv[])
{
WSADATA wData;
 WSAStartup(MAKEWORD(2,2),&wData);
WSAEVENT eventArray[WSA_MAXIMUM_WAIT_EVENTS];
 SOCKET sockArray[WSA_MAXIMUM_WAIT_EVENTS];
 int nEventToal=0;
 USHORT nPort=4567;//Sever's Port Number
 SOCKET sListen=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
 sockaddr_in sin;
 memset(&sin,0,sizeof(sin));
 sin.sin_family=AF_INET;
 sin.sin_port=htons(nPort);
 sin.sin_addr.S_un.S_addr=INADDR_ANY;
 if(::bind(sListen,(sockaddr*)&sin,sizeof(sockaddr))==SOCKET_ERROR){ //if binding error then reutrn the function
  std::cout<<"Failed Bind() \n"<<std::endl;
  return -1;
 }
 ::listen(sListen,16);
 WSAEVENT events=::WSACreateEvent(); //create event's object into socket
 ::WSAEventSelect(sListen,events,FD_ACCEPT|FD_CLOSE);
 eventArray[nEventToal]=events;
 sockArray[nEventToal]=sListen;
 ++nEventToal;
 while(TRUE){
  int nIndex=::WSAWaitForMultipleEvents(nEventToal,eventArray,FALSE,WSA_INFINITE,FALSE);
  nIndex=nIndex-WSA_WAIT_EVENT_0;
  for(int i=nIndex;i<nEventToal;i++){
   nIndex=::WSAWaitForMultipleEvents(1,&eventArray[i],TRUE,1000,FALSE);
   if(nIndex==WSA_WAIT_FAILED||nIndex==WSA_WAIT_TIMEOUT)
    continue;
   else{
    WSANETWORKEVENTS eventWork;
    ::WSAEnumNetworkEvents(sockArray[i],eventArray[i],&eventWork);
    if(eventWork.lNetworkEvents & FD_ACCEPT){
     if(eventWork.iErrorCode[FD_ACCEPT_BIT]==0){
      if(nEventToal>WSA_MAXIMUM_WAIT_EVENTS){
       std::cout<<"Too many connection!\n"<<std::endl;
       continue;
      }
      SOCKET sNew=::accept(sockArray[i],NULL,NULL);
      WSAEVENT eventClient=::WSACreateEvent();
      WSAEventSelect(sNew,eventClient,FD_READ|FD_CLOSE|FD_WRITE);
      eventArray[nEventToal]=eventClient;
      sockArray[nEventToal]=sNew;
      ++nEventToal;
      std::cout<<"登陆1个人进来了"<<std::endl;
     }
    }else if(eventWork.lNetworkEvents & FD_READ)
    {
     if(eventWork.iErrorCode[FD_READ_BIT]==0){
      char szText[256];
      int nRecv=::recv(sockArray[i],szText,strlen(szText),0);
      if(nRecv>0)
      {
       szText[nRecv]='\0';
       std::cout<<szText<<std::endl;
      }
     }
    }else if(eventWork.lNetworkEvents & FD_CLOSE){
     if(eventWork.iErrorCode[FD_CLOSE_BIT]==0){
      std::cout<<"退出了哦"<<std::endl;
      ::closesocket(sockArray[i]);
      for(int j=i;j<nEventToal-1;++j){
       sockArray[j]=sockArray[j+1];
       eventArray[j]=eventArray[j+1];
      }
      eventArray[nEventToal]=0;
      sockArray[nEventToal]=0;
      --nEventToal;
     }
    }else if(eventWork.lNetworkEvents &FD_WRITE){
    }
   }
  }
 }

 WSACleanup();
 return 0;
}

posted @ 2008-01-15 15:43 Lemo 阅读(2238) | 评论 (0)编辑 收藏


2008年1月10日

#include <stdio.h>
#include <tchar.h>
#include <winsock.h>
#include <mysql.h>
#include <string.h>
#include <windows.h>


int _tmain(int argc, _TCHAR* argv[])
{
   MYSQL mysql;     // need a instance to init
   MYSQL_RES *res;
   MYSQL_ROW row;
   char *query;
   int t,r;
 mysql_init(&mysql);
   if (!mysql_real_connect(&mysql,"localhost", "root", "330210520", "text",0,NULL,0))
   {
       printf( "Error connecting to database: %s\n",mysql_error(&mysql));
   }
 else printf("Connected...\n");
 query = "select * from t1";
  
 t = mysql_real_query(&mysql,query,(unsigned int) strlen(query));
 if (t)
 {
    printf("Error making query: %s\n",
      mysql_error(&mysql));
 }
 else printf("[%s] made...\n", query);
 res = mysql_store_result(&mysql);
 while(row = mysql_fetch_row(res))
 {
  for(t=0;t<mysql_num_fields(res);t++)
  {
   printf("%s ",row[t]);
  }
  printf("\n");
 }
 
 printf("mysql_free_result...\n");
 mysql_free_result(res);   
 
 
 // execute the insert query
 query = "insert into t1(id, name) values(3, 'kunp')";
 t = mysql_real_query(&mysql,query,(unsigned int) strlen(query));
 if (t)
 {
    printf("Error making query: %s\n",
      mysql_error(&mysql));
 }
 else printf("[%s] made...\n", query);
  
    mysql_close(&mysql);


 return 0;
}

刚开始做的时候出了很多问题!不过最重要是要包含socket文件!还有下面2个库 ! 配置了mysql数据库文件下的路径!一个是include还有一个是lib,

libmySQL.lib wsock32.lib 不明白的留言 我在写详细告诉你呵呵!vs下配置MySQL\MySQL Server 5.0\include 和C:\Program Files\MySQL\MySQL Server 5.0\lib\opt

刚试调用过程!发现原来要设置参数CLIENT_MULTI_STATEMENTS
mysql_real_connect(&mysql,"localhost", "root", "330210520", "text",0,NULL,0)改为mysql_real_connect(&mysql,"localhost", "root", "330210520", "text",0,NULL,CLIENT_MULTI_STATEMENTS) 嘿嘿郁闷了半天!

posted @ 2008-01-10 12:46 Lemo 阅读(4683) | 评论 (4)编辑 收藏


2007年12月26日

use text;  //进入数据库
execute sp_fulltext_database 'enable';//打开全文索引
execute sp_fulltext_catalog 'ft_test','create'// 创建全文索引
execute sp_fulltext_table 'mx_news_from','create','ft_test','key_index';//
execute sp_fulltext_column 'mx_news_from','mxtitle','add';
execute sp_fulltext_table 'mx_news_from','activate';
execute sp_fulltext_catalog 'ft_test','start_full';

//执行 查看一下全文索引

select mxtitle
from mx_news_from where contains(mxtitle,'梦想')

select mxtitle
from mx_news_from
where freetext(*,'梦想')

Select fulltextserviceproperty('IsFullTextInstalled')  //查看是否安全全文索引组件

posted @ 2007-12-26 12:11 Lemo 阅读(670) | 评论 (0)编辑 收藏

Doxygen是基于GPL的开源项目,是一个非常优秀的文档系统,当前支持在大多数unix(包括linux),windows家族,Mac系统上运行,完全支持C++, C, Java, IDL(Corba和Microsoft 家族)语言,部分支持PHP和C#语言,输出格式包括HTML、latex、RTF、ps、PDF、压缩的HTML和unix manpage,Doxygen软件可以从这里下载,软件本身用法非常简单。这里不做介绍,下面主要是代码中doxygen的注释的写法的介绍。


1. 模块定义(单独显示一页)

/*
* @defgroup 模块名 模块的说明文字
* @{
*/
… 定义的内容 …
/** @} */ // 模块结尾

2. 分组定义(在一页内分组显示)

/*
* @name 分组说明文字
* @{
*/
… 定义的内容 …
/** @} */

3. 变量、宏定义、类型定义简要说明

/** 简要说明文字 */
#define FLOAT float

/** @brief 简要说明文字(在前面加 @brief 是标准格式) */
#define MIN_UINT 0

/*
* 分行的简要说明 \n
* 这是第二行的简要说明
*/
int b;

4. 函数说明

/*
* 简要的函数说明文字
* @param [in] param1 参数1说明
* @param [out] param2 参数2说明
* @return 返回值说明
*/

int func(int param1, int param2);

/*
* 打开文件 \n
* 文件打开成功后,必须使用 ::CloseFile 函数关闭。
* @param[in] file_name 文件名字符串
* @param[in] file_mode 文件打开模式字符串,可以由以下几个模块组合而成:
* - r 读取
* - w 可写
* - a 添加
* - t 文本模式(不能与 b 联用)
* - b 二进制模式(不能与 t 联用)
* @return 返回文件编号
* - -1 表示打开文件失败
* @note 文件打开成功后,必须使用 ::CloseFile 函数关闭
* @par 示例:
* @code
// 用文本只读方式打开文件
int f = OpenFile(”d:\\test.txt”, “rt”);
* @endcode
* @see ::ReadFile ::WriteFile ::CloseFile
* @deprecated 由于特殊的原因,这个函数可能会在将来的版本中取消。
*/
int OpenFile(const char* file_name, const char* file_mode);

5. 枚举类型定义

/** 枚举常量 */
typedef enum TDayOfWeek
{
SUN = 0, /**< 星期天(注意,要以 “<” 小于号开头) */
MON = 1, /**< 星期一 */
TUE = 2, /**< 星期二 */
WED = 3, /**< 星期三 */
THU = 4, /**< 星期四 */
FRI = 5, /**< 星期五 */
SAT = 6 /**< 星期六 */
}

/** 定义类型 TEnumDayOfWeek */
TEnumDayOfWeek;

6. 项目符号标记

/*
* A list of events:
* - mouse events
* -# mouse move event
* -# mouse click event\n
* More info about the click event.
* -# mouse double click event
* - keyboard events
* -# key down event
* -# key up event
*
* More text here.
*/

结果为:

A list of events:

mouse events
mouse move event
mouse click event
More info about the click event.
mouse double click event
keyboard events
key down event
key up event
More text here.

代码示范:

/*
* @defgroup EXAMPLES 自动注释文档范例
* @author minidxer
* @version 1.0
* @date 2007-2008
* @{
*/

/*
* @name 文件名常量
* @{
*/

/** 日志文件名 */
#define LOG_FILENAME “c:\\log\\debug.log”
/** 数据文件名 */
#define DATA_FILENAME “c:\\data\\detail.dat”
/** 存档文件名 */
#define BAK_FILENAME “c:\\data\\backup.dat”

/** @}*/ // 文件名常量

/*
* @name 系统状态常量
* @{
*/

/** 正常状态 */
#define SYS_NORMAL 0
/** 故障状态 */
#define SYS_FAULT 1
/** 警告状态 */
#define SYS_WARNNING 2

/** @}*/ // 系统状态常量

/** 枚举常量 */
typedef enum TDayOfWeek
{
SUN = 0, /**< 星期天 */
MON = 1, /**< 星期一 */
TUE = 2, /**< 星期二 */
WED = 3, /**< 星期三 */
THU = 4, /**< 星期四 */
FRI = 5, /**< 星期五 */
SAT = 6 /**< 星期六 */
}
/** 定义类型 TEnumDayOfWeek */
TEnumDayOfWeek;
/** 定义类型 PEnumDayOfWeek */
typedef TEnumDayOfWeek* PEnumDayOfWeek;

/** 定义枚举变量 enum1 */
TEnumDayOfWeek enum1;
/** 定义枚举指针变量 enum2 */
PEnumDayOfWeek p_enum2;

/*
* @defgroup FileUtils 文件操作函数
* @{
*/

/*
* 打开文件 \n
* 文件打开成功后,必须使用 ::CloseFile 函数关闭。
* @param[in] file_name 文件名字符串
* @param[in] file_mode 文件打开模式字符串,可以由以下几个模块组合而成:
* - r 读取
* - w 可写
* - a 添加
* - t 文本模式(不能与 b 联用)
* - b 二进制模式(不能与 t 联用)
* @return 返回文件编号
* - -1 表示打开文件失败

* @note 文件打开成功后,必须使用 ::CloseFile 函数关闭
* @par 示例:
* @code
// 用文本只读方式打开文件
int f = OpenFile(”c:\\test.txt”, “rt”);
* @endcode

* @see ::ReadFile ::WriteFile ::CloseFile
* @deprecated 由于特殊的原因,这个函数可能会在将来的版本中取消。
*/
int OpenFile(const char* file_name, const char* file_mode);

/*
* 读取文件
* @param[in] file 文件编号,参见:::OpenFile
* @param[out] buffer 用于存放读取的文件内容
* @param[in] len 需要读取的文件长度
* @return 返回读取文件的长度
* - -1 表示读取文件失败

* @pre \e file 变量必须使用 ::OpenFile 返回值
* @pre \e buffer 不能为 NULL
* @see ::OpenFile ::WriteFile ::CloseFile
*/
int ReadFile(int file, char* buffer, int len);

/*
* 写入文件
* @param[in] file 文件编号,参见:::OpenFile
* @param[in] buffer 用于存放将要写入的文件内容
* @param[in] len 需要写入的文件长度
* @return 返回写入的长度
* - -1 表示写入文件失败

* @pre \e file 变量必须使用 ::OpenFile 返回值
* @see ::OpenFile ::ReadFile ::CloseFile
*/
int WriteFile(int file, const char* buffer, int len);

/*
* 关闭文件
* @param file 文件编号,参见:::OpenFile
* @retval 0 为成功
* @retval -1 表示失败

* @see ::OpenFile ::WriteFile ::ReadFile
* @deprecated 由于特殊的原因,这个函数可能会在将来的版本中取消。
*/
int CloseFile(int file);

/** @}*/ // 文件操作函数

/** @}*/ // 自动注释文档范例

 

posted @ 2007-12-26 11:06 Lemo 阅读(853) | 评论 (0)编辑 收藏

 

一般的推介链接,比如text-link-ads的http://www.text-link-ads.com/?ref=131909,后面会有一个ref=131909这样的后缀,一般人看到这样形式的链接,不管是好的还是坏的,都会有提防心理而不会去点击,另外假如可以将外部链接转成内部链接,对于SEO也比较有好处,记不清是在哪里看到过一篇利用php实现隐藏推介链接的文章(假如有人知道麻烦通知我一下),弄的比较麻烦,实际上利用JavaScript的location,就可以简单的实现隐藏这样的链接。也可以将其转化为人们熟悉的http://blog.minidx.com/ext/text-link-ads.html这样的格式,或者http://blog.minidx.com/ext/text-link-ads/这样的格式。实现效果可以参照《advertlets,让我又爱又恨的亚洲地区博客的付费评论服务商》,《开博1个月不到,照样可以申请到text-link-ads》,《PayPal的注册以及使用中需要注意的一些问题》,《为比较空闲的人准备的赚钱途径–taketheinternetback》,以text-link-ads为例,具体实现方法如下:

 

●假如是自主博客(独立博客),http://blog.minidx.com/ext/text-link-ads.html这样的链接格式的实现方法:
1、创建一个文件,将文件名改为text-link-ads.html,文件内容如下:

<script>location=“http://www.text-link-ads.com/?ref=131909″</script>
2、在自己的空间创建ext目录,将刚才的text-link-ads.html上传至该目录下
3、在需要做链接的地方就可以使用http://blog.minidx.com/ext/text-link-ads.html这样的URL了。
 
同样的,http://blog.minidx.com/ext/text-link-ads/这样的方式可以这样实现:
1、创建和上面1同样内容的文件,文件名为index.html或者index.htm或者任意自己服务器设定的默认首页文件名
2、在自己的域名blog.minidx.com根目录下的ext目录下创建text-link-ads目录
3、上传文件index.html到该目录下
4、在需要做链接的地方就可以使用http://blog.minidx.com/ext/text-link-ads/这样的URL了。
 
●假如用的是BSP,无法自己做创建目录,上传文件这样的操作,那也没关系,只要BSP支持编辑HTML代码,利用OnClick函数我们也可以实现同样的功能:
1、发表文章的地方选择HTML编辑
2、在链接的地方添加下面的代码:
<a onclick=”parent.location.href=’http://www.text-link-ads.com/?ref=131909′;return event.returnValue=false” target=”_blank” href=”http://blog.minidx.com/ext/text-link-ads.html”>text-link-ads</a>
parent.location.href后面的http://www.text-link-ads.com/?ref=131909是实际的链接地址;http://blog.minidx.com/ext/text-link-ads.html是鼠标移上去时候显示在浏览器状态栏的地址,这里你可以写成任意你想写的文字,甚至空白也可以,后面的text-link-ads是显示的文字。图片链接的实现方法也是一样的,不再叙述~
 
●假如既不是独立博客,BSP也不支持编辑HTML或者不支持JavaScrip的编辑……没办法,老老实实贴上原来的URL,该什么样子就什么样子吧。

posted @ 2007-12-26 11:03 Lemo 阅读(263) | 评论 (1)编辑 收藏


2007年12月23日

头文件SOCKETLIBSOCKET_H

#ifndef SOCKETLIBSOCKET_H
#define SOCKETLIBSOCKET_H
#include "BasicLib/BasicLib.h"
#include "SocketLibTypes.h"
#include "SocketLibErrors.h"
namespace SocketLib
{
class Socket
    {
    public:

        inline sock GetSock() const
        {
            return m_sock;
        }


        inline port GetLocalPort() const
        {
            return ntohs( m_localinfo.sin_port );
        }

        inline ipaddress GetLocalAddress() const
        {
            return m_localinfo.sin_addr.s_addr;
        }


        void Close();


        void SetBlocking( bool p_blockmode );

 

    protected:

        Socket( sock p_socket = -1 );


        sock m_sock;                  

        struct sockaddr_in m_localinfo;

        bool m_isblocking;        
    };

 

    class DataSocket : public Socket
    {
    public:

        DataSocket( sock p_socket = -1 );

 
        inline ipaddress GetRemoteAddress() const
        {
            return m_remoteinfo.sin_addr.s_addr;
        }


 
        inline port GetRemotePort() const
        {
            return ntohs( m_remoteinfo.sin_port );
        }

 

        inline bool IsConnected() const
        {
            return m_connected;
        }

 

        void Connect( ipaddress p_addr, port p_port );


        int Send( const char* p_buffer, int p_size );

  
        int Receive( char* p_buffer, int p_size );

   
        void Close();

    protected:

        bool m_connected;             

        struct sockaddr_in m_remoteinfo;

    };

 

    class ListeningSocket : public Socket
    {
    public:

 
        ListeningSocket();

 
        void Listen( port p_port );


        DataSocket Accept();

 
        inline bool IsListening() const
        {
            return m_listening;
        }


 
        void Close();

    protected:
        bool m_listening;           

    };


}  


#endif

//Cpp文件

#include "SocketLibSocket.h"

namespace SocketLib
{

    void Socket::Close()
    {

    #ifdef WIN32
        closesocket( m_sock );
    #else
        close( m_sock );
    #endif


        m_sock = -1;
    }

    void Socket::SetBlocking( bool p_blockmode )
    {
        int err;

        #ifdef WIN32
            unsigned long mode = !p_blockmode;
            err = ioctlsocket( m_sock, FIONBIO, &mode );
        #else
 
            int flags = fcntl( m_sock, F_GETFL, 0 );

 
            if( p_blockmode == false )
            {
                flags |= O_NONBLOCK;
            }
            else
            {
                flags &= ~O_NONBLOCK;
            }
            err = fcntl( m_sock, F_SETFL, flags );
        #endif

        if( err == -1 )
        {
            throw( Exception( GetError() ) );
        }

        m_isblocking = p_blockmode;
    }


    Socket::Socket( sock p_socket )
    : m_sock( p_socket )
    {
        if( p_socket != -1 )
        {
            socklen_t s = sizeof(m_localinfo);
            getsockname( p_socket, (sockaddr*)(&m_localinfo), &s );
        }


        m_isblocking = true;
    }

 


    DataSocket::DataSocket( sock p_socket )
    : Socket( p_socket ),
    m_connected( false )
    {
        if( p_socket != -1 )
        {
            socklen_t s = sizeof(m_remoteinfo);
            getpeername( p_socket, (sockaddr*)(&m_remoteinfo), &s );
            m_connected = true;
        }
    }


    void DataSocket::Connect( ipaddress p_addr, port p_port )
    {
        int err;

        if( m_connected == true )
        {
            throw Exception( EAlreadyConnected );
        }

        if( m_sock == -1 )
        {
            m_sock = socket( AF_INET, SOCK_STREAM, IPPROTO_TCP );

            if( m_sock == -1 )
            {
                throw Exception( GetError() );
            }
        }


        m_remoteinfo.sin_family = AF_INET;
        m_remoteinfo.sin_port = htons( p_port );
        m_remoteinfo.sin_addr.s_addr = p_addr;
        memset( &(m_remoteinfo.sin_zero), 0, 8 );

        socklen_t s = sizeof(struct sockaddr);
        err = connect( m_sock, (struct sockaddr*)(&m_remoteinfo), s );
        if( err == -1 )
        {
            throw Exception( GetError() );
        }

        m_connected = true;

        err = getsockname( m_sock, (struct sockaddr*)(&m_localinfo), &s );
        if( err != 0 )
        {
            throw Exception( GetError() );
        }
    }

    int DataSocket::Send( const char* p_buffer, int p_size )
    {
        int err;

        if( m_connected == false )
        {
            throw Exception( ENotConnected );
        }

        err = send( m_sock, p_buffer, p_size, 0 );
        if( err == -1 )
        {
            Error e = GetError();
            if( e != EOperationWouldBlock )
            {
                throw Exception( e );
            }
            err = 0;
        }
        return err;
    }
    int DataSocket::Receive( char* p_buffer, int p_size )
    {
        int err;

        if( m_connected == false )
        {
            throw Exception( ENotConnected );
        }
        err = recv( m_sock, p_buffer, p_size, 0 );
        if( err == 0 )
        {
            throw Exception( EConnectionClosed );
        }
        if( err == -1 )
        {
            throw Exception( GetError() );
        }

        return err;
    }

    void DataSocket::Close()
    {
        if( m_connected == true )
        {
            shutdown( m_sock, 2 );
        }

        Socket::Close();

        m_connected = false;
    }

    ListeningSocket::ListeningSocket()
    {
        m_listening = false;
    }
    void ListeningSocket::Listen( port p_port )
    {
        int err;
        if( m_sock == -1 )
        {
            m_sock = socket( AF_INET, SOCK_STREAM, IPPROTO_TCP );
            if( m_sock == -1 )
            {
                throw Exception( GetError() );
            }
        }

        int reuse = 1;
        err = setsockopt( m_sock, SOL_SOCKET, SO_REUSEADDR,
                          (char*)(&reuse), sizeof( reuse ) );
        if( err != 0 )
        {
            throw Exception( GetError() );
        }

        m_localinfo.sin_family = AF_INET;
        m_localinfo.sin_port = htons( p_port );
        m_localinfo.sin_addr.s_addr = htonl( INADDR_ANY );
        memset( &(m_localinfo.sin_zero), 0, 8 );

        err = bind( m_sock, (struct sockaddr*)&m_localinfo,
            sizeof(struct sockaddr));
        if( err == -1 )
        {
            throw Exception( GetError() );
        }
        err = listen( m_sock, 8 );
        if( err == -1 )
        {
            throw Exception( GetError() );
        }

        m_listening = true;
    }

    DataSocket ListeningSocket::Accept()
    {
        sock s;
        struct sockaddr_in socketaddress;

        socklen_t size = sizeof(struct sockaddr);
        s = accept( m_sock, (struct sockaddr*)&socketaddress, &size );
        if( s == -1 )
        {
            throw Exception( GetError() );
        }
        return DataSocket( s );
    }
    void ListeningSocket::Close()
    {
        Socket::Close();

     
        m_listening = false;
    }



主要的2个文件 其他的文件明天在贴出来.对SOCKET进行封装.只为复用


#include "SocketLib/SocketLib.h"
#include <iostream>

using namespace SocketLib;

int main()
{
    ListeningSocket lsock;             
    DataSocket dsock;                  
    char buffer[128];                       
   int size = 0;                       
    int received;                      
    bool emo=false;
    unsigned long mode =!emo;
    std::cout<<mode<<std::endl;
    lsock.Listen( 5098 );              
    dsock = lsock.Accept();         

    dsock.Send( "Hello!\r\n", 8 );

    while( true )
    {
       
        received = dsock.Receive( buffer + size, 128 - size );
        size += received;

    
        if( buffer[size - 1] == '\n' )
        {
   
            std::cout << size << std::endl;

 
            dsock.Send( buffer, size );
            size = 0;
        }
    }
    return 0;
}

主执行CPP!累了一天了 终于可以休息了嘿嘿 ! 有问题可以留言呵呵!我也是刚入门C++不久

posted @ 2007-12-23 21:46 Lemo 阅读(509) | 评论 (1)编辑 收藏


仅列出标题  

posts - 6, comments - 6, trackbacks - 0, articles - 0

Copyright © Lemo