【问题标题】:having trouble transfer arrays over socket通过套接字传输数组时遇到问题
【发布时间】:2014-07-15 10:41:37
【问题描述】:

我在 c 中通过套接字传输 int 数组时遇到问题。 htonl() 的正确用法是什么? 假设我有:

int arra[3]={6000,7000,8000};

和名为 new_socket 的套接字

如何正确地将其传输到套接字的另一端?

客户端正在通过以下代码读取它:

char buf[BUFLEN] = "";  // buffer for recv() calls

for (i = 0; i < nbytes; i += INTLEN) {
    int file_port = ntohl(*(int *)&buf[i]);

【问题讨论】:

  • 枚举发送方通过htonl修改的数组之前发送,并在接收方使用ntohl再次完成接收之后.看起来您几乎已经完成了后半部分。
  • 我无法修改客户端正在等待缓冲区并从中获取 int,仍然无法理解如何实现服务器
  • 您的问题似乎是关于在发送之前对arra 数组“做什么”。为此,我告诉过你。实际套接字工作的责任是一个完全不相关的问题。您还应该知道,此设计假定 int 在客户端和服务器上的位宽相同;如果客户端是真正可移植的,那么可能是真的。祝你好运。

标签: c sockets ftp htonl


【解决方案1】:
   int i, wp1, ret;
   for (i = 0; i < 3; i++) {
      wp1 = htonl(arr[i]);
      ret = write(sockfd, wp1, sizeof(int));
      //error check based on ret
   }

这行得通。 TCP 是一个流,一次写入或多次写入都没有关系,您可以一次全部读取或读取,直到您有必要的字节数并将整个程序粘贴到任一侧并获得输出

【讨论】:

  • 仍然无法正常工作,无法更改客户端方法。需要作为缓冲区发送左右
  • 你能更好地解释一下这个答案吗?就目前而言,它被 StackOverflow 启发式标记为低质量。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-10-09
  • 1970-01-01
  • 2020-07-15
  • 1970-01-01
  • 2021-05-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多