利用socket进行网络传输要如何封装不同的命令,使双方都能识别这个命令?
例如,当客户登录的时候会给服务器一个登录命令,当客户退出的时候又是一个退出命令,当客户向服务器发送消息又是另一个命令,如何来区分这些不同的命令?
能不能把这些命令给封装为不同的类?但是网络传输不是要网络字节序吗,发送和接收时要怎么转换成相应的类?请给代码示例

解决方案 »

  1.   

    命令可以通过字符名称等,如start,end,...接收到数据后,放到结构体等中,接收到数据后,再转化为结构体处理
      

  2.   

    定义一组枚举类型,比如{open,close},然后通过接受的数据根据switch...case 来判断执行那个命令
      

  3.   

    这个属于应用层自定义协议
    简单的服务可以考虑
    楼上的提议
    复杂的可以参考HTTP
    另外你说的类封装,我不太明白你的意思
    不过可以把对象作(char*)struct 强制转换
    在接受端再转换过来,不过有些语言是不支持的
      

  4.   

    typedef struct msgHead{
      DWORD len;
      DWORD type;
    }HEAD,*PHEAD;
    typedef struct MSGCONTENT
    {
        HEAD head;
        ....
    }MSG,PMSG;....
    send(&msg,sizeof(MSG),0);
      

  5.   

    工厂模式:针对不同的协议命令返回不同的类指针,类对象在工厂里只有一个实例
    至于协议的设计,可以这样procname@procdata1@procdata2@....,所有解析数据都只通过一个通讯类获得即可
    根据第一段命令名从工厂获得具体命令协议的处理类,处理除第一段后面的所有数据
    基本上很多协议都是这么做的
      

  6.   

    方法危险,不可取,最好你的数据都转换成char型的,否则的话字节序会是一个问题
      

  7.   

    传数据之前 先一个字符串 例如 char *p={***} 来表示将要传的数据大小和类型不就行了。