基于Linux的socket编程模板

来源:未知 责任编辑:责任编辑 发表时间:2014-01-20 07:53 点击:

 在网络编程编程中,我们经常会遇到这样一种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,     

发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
用户名: 验证码:点击我更换图片
最新评论 更多>>

推荐热点

  • /etc/fstab 详解
  • nginx主主集群
  •  LVS-NAT和LVS-DR模式的实现详解
  •  RHCE考试之磁盘配额
  • 学习笔记:ACL详解
  •  LVM逻辑卷管理器
  • suse linux双网卡双网关配置
  •  Nginx主主负载均衡架构
  • ubuntu学习Mysql

快速直达

操作系统导航

LinuxWindows虚拟机
网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
Copyright © 2008-2015 计算机技术学习交流网. 版权所有

豫ICP备11007008号-1