FTP с использованием Socket Progarmming - PullRequest
0 голосов
/ 26 апреля 2018

Итак, я пытался реализовать простую программу чтения файлов, используя программирование сокетов. Я использую TCP для подключения к серверу. Клиент отправляет имя файла, а сервер читает его и отправляет его содержимое обратно клиенту. Проблема в том, что я получаю сообщение об ошибке в программе сервера:

Ошибка сегментации: 11

Вот программы:

Server.c

#include<stdio.h>
#include<unistd.h>
#include<netdb.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<strings.h>
#include <netinet/in.h>
int main()
{
    int s=socket(AF_INET,SOCK_STREAM,0);

    struct sockaddr_in saddr;
    saddr.sin_family=AF_INET;
    saddr.sin_port=htons(1999);
    saddr.sin_addr.s_addr=htonl(INADDR_ANY);

    socklen_t slen=sizeof(saddr);

    bind(s,(struct sockaddr*)&saddr,slen);
    printf("Server Running..\n");

    listen(s,5);

    struct sockaddr_in caddr;
    socklen_t clen=sizeof(caddr);
    int ad=accept(s,(struct sockaddr*)&caddr,&clen);
    printf("Client Connected\n");

    FILE *fp;
    char buff[1024],file[1000];
    while(1)
    {
    bzero(&buff,sizeof(buff));
    bzero(&file,sizeof(file));

    recv(ad,buff,sizeof(buff),0);
    fp=fopen(buff,"r");
    fread(file,sizeof(file),1,fp);
    send(ad,file,sizeof(file),0);
    }
    close(s);
}

Client.c

#include<stdio.h>
#include<unistd.h>
#include<netdb.h>
#include<sys/types.h>
#include<sys/socket.h>
#include <netinet/in.h>
#include<strings.h>
int main()
{
    int s=socket(AF_INET,SOCK_STREAM,0);

    struct sockaddr_in saddr;
    saddr.sin_family=AF_INET;
    saddr.sin_port=htons(1999);
    saddr.sin_addr.s_addr=inet_addr("127.0.0.1");

    socklen_t slen=sizeof(saddr);

    connect(s,(struct sockaddr*)&saddr,slen);
    char b[1024],f[1000];

    while(1)
    {
        bzero(&b,sizeof(b));
        bzero(&f,sizeof(f));
        printf("Enter the name of file : ");
        fgets(b,sizeof(b),stdin);

        send(s,b,sizeof(b),0);
        recv(s,f,sizeof(f),0);

        printf("The contents are : %s", f);

    }
}

Может кто-нибудь сказать мне возможную ошибку, которую я здесь делаю?

1 Ответ

0 голосов
/ 26 апреля 2018

Вы никогда не проверяете результат fopen(). Вероятно, это сбой, потому что клиент использует fgets(), и это оставляет символ новой строки в буфере ввода. Таким образом, имя файла имеет дополнительный \n в конце. Кроме того, вы никогда не закрываете файл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...