首页 文章

在C套接字编程中正确写入/读取整数的方法

提问于
浏览
2

我需要从带有 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);
}

1 回答

  • 2

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

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

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

相关问题