【问题标题】:read a sequence of integers from client and send it to server从客户端读取整数序列并将其发送到服务器
【发布时间】:2017-10-15 13:00:20
【问题描述】:

我是套接字编程的新手,我想从客户端程序中读取整数序列,并将带有这些整数的数组发送到服务器程序并在那里进行一些计算。但我该怎么做?我用 write 发送的数组必须是 char* 吗?也许从标准输入读取一行并从数字以外的其他字符中清除它并将其发送到服务器然后分别获取每个数字?但我该怎么做?这是我的代码..

#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/un.h>

int main() {

    int sockfd, answer=1;
    struct sockaddr_un serv_addr;

    if ((sockfd = socket(AF_UNIX, SOCK_STREAM, 0)) == -1) {
        perror("ERROR opening socket");
        exit(1);
    }

    serv_addr.sun_family = AF_UNIX;
    strcpy(remote.sun_path, "askisi3");

    if (connect(sockfd, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) == -1) {
        perror("ERROR connecting");
        exit(1);
    }

    do{
        printf("Enter a sequence of integers.\n");



        //code here...


        printf("Type 0 for exit or any number to continue.\n");
        scanf("%d",&answer)
    }while(answer=0);


    return 0;
}

【问题讨论】:

  • 你需要发送的缓冲区是一个指向const void的指针。您可以传入指向 any 对象的指针(但请注意,它可能是不可移植的
  • "我用 write 发送的数组必须是char*" A char* 正好是一个指针,精确存储 one 指针值。没有机会存储字符串和整数或其他任何内容。

标签: c sockets unix


【解决方案1】:

我们不会为您编写关键代码,而是回答您的具体问题:

我用 write 发送的数组必须是 char* ?

首先要理解的是,从通信通道本身的角度来看,没有数组也没有指针,只有字节流。

要理解的第二件事是指针本身的值只对一个进程有意义,所以发送 that 是没有用的。但是,您可能希望发送给定指针指向的部分或全部数据。事实上,这正是write() 函数所做的——它发送所提供的指针所指向的一些字节数。

要了解的第三件事是,您应该发送什么的详细信息取决于通信双方之间关于发送什么以及以何种形式发送的某种协议。这称为应用层“协议”(不要与 TCP 等网络协议混淆)。由于您同时编写客户端和服务器,可以选择该协议。

也许从标准输入读取一行并从除数字以外的其他字符中清除它并将其发送到服务器然后单独获取每个数字?

这将是一个可行的选择。

但是我该怎么做呢?

对于这个场地来说,这个问题太宽泛了。

【讨论】:

    猜你喜欢
    • 2018-11-10
    • 1970-01-01
    • 1970-01-01
    • 2013-04-11
    • 2021-12-07
    • 1970-01-01
    • 2021-02-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多