CTCPCustom类CTCPCustom的定义在TCPCustom.h文件下。 class CTCPCustom
{
public:
CTCPCustom();
virtual ~CTCPCustom();
public:
char m_RemoteHost[100]; //远程主机IP地址
int m_RemotePort; //远程主机端口号
int m_socketfd; //通讯socket
int m_SocketEnable;
int m_ExitThreadFlag;
CTCPServer* m_pTCPServer;
private:
// 通讯线程函数
pthread_t m_thread; //通讯线程标识符ID
static void* SocketDataThread(void* lparam); //TCP连接数据通讯线程
public:
int RecvLen;
char RecvBuf[1500];
// 打开socket,创建通讯线程
int Open(void* lparam);
// 关闭socket,关闭线程,释放Socket资源
int Close();
// 向客户端发送数据
int SendData(const char * buf , int len );
}; 其中的SocketDataThread函数是实现TCP连接数据通讯的核心代码,在该函数中调用select( )等待TCP连接的通讯数据,对于接收的TCP连接数据的处理也是在该函数中实现,在本例程中处理为简单的数据回发,用户可结合实际的应用修改此处代码,流程如下: CTCPSerer类的具体使用也比较简单,主要是调用对于类中定义Open函数来启动各个TCP通讯线程,反而在主循环中需要实现的功能代码不多了,在本例程中仅仅为每隔1s输出提示信息。以下为Step3_TCPServer.cpp中的相关代码。 class CTCPServer m_TCPServer;
int main()
{
int i1;
printf( ''Step3_TCPTest V1.0\n'' );
// 给TCP服务器端口赋值
m_TCPServer.m_LocalPort = 1001;
// 创建Socket,启动TCP服务器侦听线程
i1 = m_TCPServer.Open( );
if( i1<0 )
{
printf( ''TCP Server start fail\n'');
return -1;
}
// 进入主循环,主要是负责管理工作
for( i1=0; i1<10000;i1++) //实际应用时,可设置为无限循环
{
sleep(1);
printf( ''%d \n'', i1+1);
}
m_TCPServer.Close( );
return 0;
} |