我正在尝试在linux上修改这个c程序。
现在,该程序要求用户输入,然后将该输入发送到服务器 现在,我不想那样。我希望服务器的输入来自file.txt。
文件中每行包含一个单词,文件中的每一行都将作为缓冲区发送到服务器。
示例names.txt:
john
jane
doe
示例缓冲区:
GET /cast/api.php?name=john
GET /cast/api.php?name=jane
GET /cast/api.php?name=doe
当客户端到达文件末尾并将所有这些数据发送到服务器然后它将结束时,每个名称都将被发送到服务器。
问题是我有点迷失,这是我第一次使用C语言编写Linux代码。
现在我只是想编写如何设置缓冲区而不是用户输入 一旦我能够做到这一点。然后我将尝试对其进行编码以从文件中获取缓冲区。
这是我的代码:
int sockfd, portno, n;
struct sockaddr_in serv_addr;
struct hostent *server;
char buffer[256];
char buffer2[256];
portno = 80;
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd < 0)
error("ERROR opening socket");
server = gethostbyname("api.domain.com");
if (server == NULL) {
fprintf(stderr,"ERROR, no such host\n");
exit(0);
}
bzero((char *) &serv_addr, sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
bcopy((char *)server->h_addr,
(char *)&serv_addr.sin_addr.s_addr,
server->h_length);
serv_addr.sin_port = htons(portno);
if (connect(sockfd,(struct sockaddr *) &serv_addr,sizeof(serv_addr)) < 0)
error("ERROR connecting");
printf("1");
printf("Please enter the message: ");
//this gives me 'err: incompatible types in assignment'
buffer = "somename";
printf("2");
bzero(buffer,256);
//fgets(buffer,255,stdin);
sprintf(buffer2, "GET /cast/api.php?name=%s", buffer);
n = write(sockfd,buffer2,strlen(buffer2));
if (n < 0)
error("ERROR writing to socket");
bzero(buffer,256);
n = read(sockfd,buffer,255);
if (n < 0)
error("ERROR reading from socket");
printf("%s\n",buffer);
close(sockfd);
return 0;
答案 0 :(得分:1)
您可以使用sprintf写入缓冲区。 E.g。
char buffer[256];
bzero(buffer,256);
sprintf(buffer, "What you want to print to the buffer, can do with arguments %d %d %d",arg1,arg2,arg3);
编辑我发现的错误以及它应该是什么
bzero(buffer,256); //not really needed as we use sprintf, but use to be sure
sprintf(buffer,"%s","something");
//fgets(buffer,255,stdin);
sprintf(buffer2, "GET /cast/api.php?name=%s", buffer);
答案 1 :(得分:0)
如果您要从stdin获取数据,则只能通过两种方式执行此操作:
1)使用静态缓冲区
char buf[256];
fgets(buf,255,stdin);
2)动态缓冲区
char *buf = malloc(256 * sizeof(char));
fgets(buf,255,stdin);
free(buf); // space is nt allocating any more