【问题标题】:Correct way to write/read integers in C socket programming在 C 套接字编程中写入/读取整数的正确方法
【发布时间】:2015-03-31 00:40:50
【问题描述】:

我需要使用 write() 函数从 TCP C 服务器传递一个整数,并使用 read() 函数在客户端接收它。

假设在我的服务器中

int check = 0

如何使用 write() 函数发送它?我在我的服务器上试过:

if (write(connfd, (const char *)&check, 4)) {
    perror("Write Error");
    exit(1);
}

在我的客户端上:

if (n = read(sockfd, &check, 4) > 0) {
    printf("ok");
}

但是这种方法既不起作用又感觉不自然。我知道我每次都必须通过缓冲区,但有没有办法加快速度?

另外,重要的是我需要创建一个带有大量变量传输的服务器/客户端程序。不能同时传递多个变量吗?

编辑: 当我说它不起作用时,我的意思是我得到“写入错误:成功”。 connfd 和 sockfd 之前已声明如下:

服务器:

if ((connfd = accept(listenfd, (struct sockaddr *) NULL, NULL)) < 0) {
    perror("Accept Error");
    exit(1);
}

客户:

if (connect(sockfd, (struct sockaddr *) &servaddr, sizeof(servaddr)) < 0) {
    fprintf(stderr,"Connect Error\n");
    exit(1);
}

【问题讨论】:

    标签: c sockets client server read-write


    【解决方案1】:

    你说它不起作用,你是什么意思?

    通过网络发送整数时必须记住的事情是字节序问题,整数在不同的计算机上可能有不同的大小(但这可能不是你的问题)。 您还需要一个sendall 方法,例如this: 以及类似的readall 方法。

    关于您的最后一个问题,您确实可以通过网络发送 4 个整数,您只需将它们复制到一个字节数组(无符号字符数组)并在 write 方法调用中指定该数组以及数组的相应大小/数据。

    【讨论】:

    • 感谢您的回答,我更新了帖子以回答您的问题
    • @wiredmark:你说“写错误:成功”,但从你打印的代码中看不出来。无论如何,您现在提到的问题可能不在写入/读取方法中,而是您如何设置连接基础架构(这里是一些在 c 中实现工作服务器/客户端的示例代码-也许您想将您的解决方案与它进行比较:codeproject.com/Tips/834154/… )。
    • 不明显是什么意思?我在尝试从服务器写入客户端时得到它(这是我在帖子中写的 perror() 函数)
    • @wiredmark:嗯,是的,但这再次表明你的问题出在其他地方,而不是你如何使用写/读方法调用
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-14
    • 2017-07-22
    • 2013-09-05
    • 1970-01-01
    • 2011-03-10
    • 2013-05-06
    • 1970-01-01
    相关资源
    最近更新 更多