c ++网络/套接字编程

时间:2012-12-24 14:57:21

标签: c++ linux network-programming

我一直在网上搜索,以找到有关C ++套接字编程的教程。我找到了其中的一些,但没有一个能帮我制作一台我可以使用的服务器。

我希望用C ++创建一个可以发送和接收数据包的服务器,但我能找到的所有教程/示例都是关于发送/接收字符串

我有平均的C ++经验。我正在使用Ubuntu(Linux)的计算机。

如果有人可以解释我如何制作一个发送/接收而不是字符串的服务器,或者指出一个很好的教程解释我如何,最好是使用POSIX-api,它会非常棒,对我帮助很大。

-ojima

修改

(我显然说'包',但我的意思是'包')

所以,让我们说我想拿一个Java游戏,比如MineCraft,并用C ++编写它的服务器。根据MinecraftCoalition,(Java)客户端发送包含数据的“数据包”。 我想知道,我如何接收(或解释)这些数据包?

MineCraft Coalition reference

4 个答案:

答案 0 :(得分:2)

如果通过 package 你正在谈论一块二进制数据,那么它很简单,但你必须知道你要发送的架构的endianness - 可能与接收器不同,可能意味着数据未正确重建。

你可能最好看一下像Boost.Asio这样的东西,它将采取这一步骤,并专门针对C ++。

答案 1 :(得分:1)

如果你想发送原始数据(一个char数组),C字符串的区别是微妙的(你必须记住终止'\ 0')。这就是大多数文档无法真正发挥作用的原因。

我的建议是:

  1. 选择一种方法将数据转换为二进制格式(boost :: serialize,协议缓冲区是不错的选择,但不是唯一的选择)。
  2. 选择一些抽象库,如boost.Asio或甚至zmq(还有其他选择)。
  3. 我不相信(但这是个人观点,可能不是共享的)大多数用例都需要处理原始套接字,而且一些C ++抽象总是令人愉快。

答案 2 :(得分:0)

套接字将仅在字节上发送和接收数组。转换为字符串很容易,因此通常将其作为示例。您可以将这些字节数组转换为您的包。

答案 3 :(得分:0)

尝试http://www.linuxhowtos.org/C_C++/socket.htm获取基本的客户端 - 服务器教程。