OOP类型协议的套接字包创建

时间:2014-10-10 04:09:28

标签: c++ sockets oop

我正在开发一个必须使用专有协议的应用程序。该协议是基于对象的,并且由于Stack Overflow,我一直在努力开发一个既直观又高效的框架。我已经在本网站和其他网站上阅读了许多有关网络编程的资源,并且我正在努力将大部分信息放在心上。经常指出的一件事是避免动态内存分配。我正在努力找到一种在没有DMA的情况下有效地构建数据包并尽可能保持OOP的方法。

我的情况摘要:

在最抽象的级别,我想提供类似于我们正在与之通信的服务器端对象的对象

class AnObject
{
public:
  AnObject();
  ~AnObject();
  void SetVal(int Val);
  int ReadVal();
private:
  char* Seg_Path;
}
  

可以实现其他方法,并且继承将发挥作用以类似于特定对象,但这就是想法。现在,这些对象在服务器端进行分组,对特定对象的访问需要打开与该组对象的连接

class AnObject_Group
{
public:
  Connect(char* ConnectData);
private:
  int ConnectionID;
  struct ConnectionSpecificData;
};

现在还有一个抽象层次我创建了一个Socket。

class My_Socket
{
public:
  Connect(char* ipAddress);
private:
  int Session_Number;
  SOCKET Socket;
}

请注意我已经留下了很多课程细节,因为我的问题是关于更高级别的结构。我已经离开了Send Recv方法,因为这是我的问题的一部分。

现在,如果AnObject发出一个读取,它必须构建一个小数据包,然后通过AnObject_Group发送它,它会在前面放置一些信息并通过My_Socket发送它。还有其他一些问题可以发挥作用。服务器响应速度很慢,所以我试图做这个ASync。我打算让一个线程工作我的所有My_Socket并处理通过WinSock发送/ recv,但我必须确保任何消息/缓冲区都可以使用它。我遇到的另一个问题是它并不总是相同的结构,即它可以去AnObject-> AnObject_Group-> AnObject_Group-> My_Socket,而且每个阶段前面的数据都不固定,通常在数据是放在前面所以AnObject不知道AnObject_Group需要添加多少数据以及需要添加多少My_Socket。

我甚至不确定构建这些数据包的顺序是否应该向My_Socket发送消息说我要发送然后让My_Socket汇编数据包或者我是否从AnObject调用AnObject_Group中调用a的方法构建数据包MySocket中的方法。我的缓冲区应该位于My_Socket还是每个AnObject中的缓冲区(可能有很多)

很抱歉,如果我的问题在第一次提问时含糊不清,但我觉得我已经阅读和搜索了这么多,并且无法在这类问题上找到一些明确的帮助。许多帖子谈论如何使用套接字发送或recv或处理多线程但我觉得获得可扩展的解决方案有点棘手

非常感谢

0 个答案:

没有答案