无法读取文件并获得结果

时间:2015-08-18 16:49:23

标签: c sockets fgets strcmp fputs

我想读取文件并匹配2个单词首先我连接套接字获取输入将其写入文件然后我想读取该文件并获得2个单词的匹配并做一些后跟但似乎它没有&# 39;工作 所以这是代码

#include<stdio.h>
#include<string.h>    //strlen
#include<sys/socket.h>
#include<arpa/inet.h> //inet_addr

int main(int argc , char *argv[])
{
    int socket_desc;
    struct sockaddr_in server;
    char *message, server_reply [2000];
    FILE *f; 
    //Create socket
    socket_desc = socket(AF_INET , SOCK_STREAM , 0);
    if (socket_desc == -1)
    {
        printf("Could not create socket");
    }

    server.sin_addr.s_addr = inet_addr("86.127.118.157");
    server.sin_family = AF_INET;
    server.sin_port = htons( 80 );

    //Connect to remote server
    if (connect(socket_desc , (struct sockaddr *)&server , sizeof(server)) < 0)
    {
        puts("connect error");
        return 1;
    }

    puts("Connected\n");

    //Send some data
    message = "GET / HTTP/1.1\r\n\r\n";
    if( send(socket_desc , message , strlen(message) , 0) < 0)
    {
        puts("Send failed");
        return 1;
    }
    puts("Data Send\n");

//Receive a reply from the server
    if( recv(socket_desc, server_reply , 2000 , 0) < 0)
    {
        puts("recv failed");
    }
    puts("Reply received\n");
    puts(server_reply);
    // Open and write the file
    f = fopen("date.txt", "w");   
    fprintf(f, server_reply);
     // read and match the words
    while (fgets (server_reply, 2500, f)) {
    if( strcmp(server_reply, "258"))
    {
    fputs(server_reply, f);
        }else{
    puts("I could not loccate the bug");
    }
    // file close
    fclose(f);
    return 0;
}
}

1 个答案:

答案 0 :(得分:1)

问题是您假设您从套接字读取字符串。那是错的。您阅读字节。没有隐含的零终止符,你必须自己完成所有这些。

保存recv(2)的返回值 - 这将告诉您读取了多少字节。

循环阅读 - 只要 某些 数据可用(或另一端关闭连接或发生错误),recv(2)就会返回,因此,您可能需要在读取之间将消息拼接在一起。