我是socket编程的新手,我想从客户端程序中读取一系列整数,并将带有这些整数的数组发送到服务器程序并在那里进行一些计算。但是我该怎么做?我发送的数组必须是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;
}
答案 0 :(得分:1)
我们不打算为您编写密钥代码,而是回答您的具体问题:
我发送的数组必须是char *?
首先要理解的是,从通信通道本身的角度来看,没有数组也没有指针,只有一个字节流。
要理解的第二件事是指针本身的值仅对一个进程有意义,因此发送 是没用的。但是,您可能希望发送给定指针指向的部分或全部数据。实际上,这正是write()
函数的作用 - 它发送了提供的指针指向的一些字节数。
要理解的第三件事是,您应该发送的内容的详细信息取决于通信方之间就将要发送的内容以及将以何种形式发送的内容达成某种协议。这称为应用层“协议”(不要与TCP等网络协议混淆)。由于您正在编写客户端和服务器,您可以选择该协议。
也许从标准输入读取一行并从数字以外的其他字符中清除它并将其发送到服务器然后分别取出每个数字?
这将是一个可行的选择。
但我该怎么做?
这个场地的问题太广泛了。