-4

我想读取文件并首先匹配 2 个单词我与套接字连接获取输入将其写入文件然后我想读取该文件并获取 2 个单词的匹配并做一些事后但似乎它不起作用所以这是代码

#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;
}
}
4

1 回答 1

1

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

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

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

于 2015-08-18T16:56:26.563 回答