基于Linux的socket编程模板
在网络编程编程中,我们经常会遇到这样一种C/S架构,服务器端(Server)监听客户端(Client)发送过来的命令,然后解析该命令,并做对应的处理,最后返回处理结果(例如成功或者失败及原因)给客户端。
最近,在Linux下做网络编程,涉及的就是上面的这种需求,简单地整理了下自己的代码,分享在这里吧,供初学者参考。
首先说一下编程思路吧。
在这种情况客户端必须实现的的接口有:连接服务器、发送、断开连接。
服务器端,有一个主线程,用于监听客户端的连接请求,一旦有新客户端连接,则创建一个新的socket及线程专门服务这个客户端。这个服务线程专门监听该客户端的命令,并且解析命令进行服务器,直到客户端断开连接或者发送关闭连接的命令。
另外,需要涉及一个通信协议,约定命令的包头、命令的识别码、命令的参数。
思路就说到这儿了,下面的相关代码,附件中有完整的代码,包含了Makefile文件。
一、通信协议设计
//////////////////////////////////////////////////////////////////////////
// COPYRIGHT NOTICE
// Copyright (c) 2011, 华中科技大学 ticktick(版权声明)
// All rights reserved.
//
/// @file Command.h
/// @brief 命令包声明文件
///
/// 定义各种TCP命令包以及相关结构体
///
/// @version 1.0
/// @author lujun
/// @E-mail lujun.hust@gmail.com
/// @date 2011/08/21
//
//
// 修订说明:
//////////////////////////////////////////////////////////////////////////
#ifndef COMMAND_H_
#define COMMAND_H_
typedef unsigned char uint8_t;
// TCP CMD header len
#define TCP_CMD_HEADER_LEN 8
// CMD header
static uint8_t TCP_CMD_HEADER_STR[TCP_CMD_HEADER_LEN] = { 0xAA,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xFF };
// max user name len
#define MAX_USER_NAME_LEN 20
// server cmd struct
typedef enum _ServerCMD
{
CMD_SAVE_USER_NAME, // save user name
CMD_SAVE_USER_AGE, // save user age
}ServerCMD;
// return cmd
typedef enum _ReturnCMD
{
DVS_RETURN_SUCCESS = 0,
DVS_RETURN_FAIL,
DVS_RETURN_TIMEOUT,
DVS_RETURN_INVLID_HEADER,
相关新闻>>
- 发表评论
-
- 最新评论 更多>>