1

我想实现一个服务器,它有一些方法可以从这些方法中接受一个二维点数组(一个结构)。我想知道是否应该将其实现为 WebService 或简单的 TCP 套接字。

目标系统是在 Debian Linux 上运行的 C++。据我了解,WebService 基于 XML/SOAP,我可以在任何其他客户端系统上使用包括其所有数据类型的接口。相反,普通的 TCP 套接字只是读取字节数组。但是有没有一种简单的方法可以通过 TCP 套接字实现强类型数据传输,这样我就不需要网络服务器来运行 WebService 了?

这是一个 C# 示例,服务器的接口应该是什么样子:

public interface IService
{
    void CloseShutter();
    bool WriteFrame(Point[] frame, bool repeat);
    MaintenanceInfo GetMaintenanceInfo();
}

public struct Point
{
    public float X { get; set; }    
    public float Y { get; set; }
    public float Z { get; set; }
    public int Color { get; set; }
    public bool Draw { get; set; }
}

public struct MaintenanceInfo
{
    public uint Lifetime { get; set; }
    public bool UsedHours { get; set; }
}

感谢您的任何建议。

马蒂亚斯

4

3 回答 3

1

您可以将 XML-RPC 用于 C++:http: //xmlrpc-c.sourceforge.net/

于 2013-05-03T14:00:01.580 回答
1

一种轻量级的方法是使用序列化。看看 boost::serialization 命名空间或任何其他做得好的库。这样,您可以直接在 tcp 流中写入序列化对象并将它们返回到另一端。如果您想要一种人类可读的格式,请将它们序列化为 xml。

否则,您可以将原始结构复制到输出缓冲区中。您可以反转您的结构以尊重网络标准字节序。还要注意数据填充。

于 2013-05-03T14:04:18.283 回答
1

Using an abstraction layer on top of TCP instead of plain sockets has many advantages. Usually those solutions use XML or any comparable human-readable format. The data is then serialized and send over a standard TCP socket. In this way cross-plattform communication (here: C++, objective-C to C#) is achieved and you can use the client/servers as objects in your code.

One of the best solutions I found so far are:

a) Apache Thrift: Pro: Easy to set up and just a few lines of auto-generated code. Cons: uses a proprietary data format which is not XML.

b) gSOAP: Pro: Widely used and based on SOAP/XML WebServices. Cons: Not that easy to learn.

c) CodeSynthesis XSD/e with Boost.Asio: Sending and receiving XML documents (or object that can be transformed from and to XML) using streams with underlying TCP sockets. Pro: Based on sockets, no SOAP/WebService. Cons: More lines of code and more learning necessary.

于 2013-05-06T06:52:10.623 回答