2015-06-05 3 views
0

Я пишу базовый TCP-клиент, с которым я пытаюсь подключиться к TCP-серверу, который я уже убедился в работе. По какой-то причине мой клиент не подключается к серверу. Он не пройдет мимо попытки подключения. И клиент, и сервер находятся на одной машине, я использую 127.0.0.1 для обоих и порт 8080. Любые указатели на почему? Благодаря!C TCP-клиент не подключается к серверу

/* 
Usage: tcpclient <server_ip> <server_port> <client ip> <input_file> <output_file> <size of send/receive buffer> 
*/ 

#include <stdio.h> 
#include <stdlib.h> 
#include <sys/types.h> 
#include <sys/socket.h> 
#include <sys/stat.h> 
#include <string.h> 
#include <arpa/inet.h> 

int main(int argc, char ** argv) { 
    char* server_ip; 
    char* client_ip; 
    char* input_file; 
    char* output_file; 
    int server_port, buffer_size; 

    server_ip = argv[1]; 
    server_port = atoi(argv[2]); 
    client_ip = argv[3]; 
    input_file = argv[4]; 
    output_file = argv[5]; 
    buffer_size = atoi(argv[6]); 

    int sockfd = 0; 
    int bitsSent = 0; 
    int bitsReceived = 0; 

    char sendBuffer[buffer_size]; 
    char recvBuffer[buffer_size]; 

    struct sockaddr_in serv_addr; 

    memset(recvBuffer, '0', sizeof(recvBuffer)); 
    memset(sendBuffer, '0', sizeof(sendBuffer)); 
    memset((char *)&serv_addr,0,sizeof(serv_addr)); 


    /* Check command line arguments */ 
    if (argc != 7) {  
     exit(0); 
    } 

    /* Create the socket */ 
    if((sockfd = socket(AF_INET, SOCK_STREAM, 0))< 0) 
    { 
     printf("\n Error : Could not create socket \n"); 
     return 1; 
    } 

    serv_addr.sin_family = AF_INET; 
    serv_addr.sin_port = htons(server_port); 
    serv_addr.sin_addr.s_addr = inet_addr(server_ip); 

    /* Attempt to connect to server */ 
    if (connect(sockfd, (struct sockaddr *)&serv_addr, sizeof(serv_addr))<0) { 
     printf("Err: Couldn't connect"); 
     return 1; 
    } 

    /* Open the input file to read */ 
    FILE *fp; 
    fp = fopen(input_file, "r"); 

    if (fp == NULL) { 
     perror("Error opening the file"); 
     return(-1); 
    } 

    /* Receive the data then write to sendBuffer */ 
    while ((bitsSent = read(sockfd, recvBuffer, buffer_size)) >0) { 
     printf("Bytes received: %d\n", bitsReceived); 
     fwrite(recvBuffer, 1, bitsReceived, fp); 
    } 

    if (bitsReceived < 0) { 
     printf("Read Error"); 
    } 

    return 0; 

} 
+0

Определить, что «не подключается». Сообщение об ошибке? Ядерный свал? Компьютер взрывается? – EJP

+0

Извините, я должен был быть более конкретным. Он вводит оператор if, где я пытаюсь установить соединение с сервером: if (connect (sockfd, (struct sockaddr *) & serv_addr, sizeof (serv_addr)) <0) – user1670032

+0

Итак, что действительно возвращает соединение? Вы должны привыкнуть к отладчику – Olaf

ответ

0

Вы пытаетесь создать connect, прежде чем создавать сокет. Так как sockfd равен нулю в этой точке, вы пытаетесь установить connect стандартный ввод.

+0

'socket()' * is * вызывается и проверяется на наличие ошибки, прежде чем вызывается 'connect()', и как он подключается до создания сокета? –

+0

@RemyLebeau Проверьте историю изменений. Вопрос был изменен на совершенно другой вопрос. –

-2

Я не помню, что было актуальным, но вместо того, чтобы:

serv_addr.sin_addr.s_addr = inet_addr(server_ip); 

попробовать:

inet_aton("127.0.0.1",&server_addr.sin_addr); 

И как другой ответ говорит, что вы забыли создать сокет:

if((sockfd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0){ 
    perror("Error al crear el socket"); 
    exit(1); 
} 
+1

Почему? Вы думаете, что что-то не так его код? –

+0

Я помню, что у меня были проблемы с этой строкой кода, и с помощью этой другой линии исправил ее. Я не помню, почему, но я посмотрю на мой проект позже, потому что я уверен, что объяснил это в комментариях – lpares12

+0

Спасибо вам всем! Я обновил код, чтобы включить создание сокета - я полностью пропустил это. Тем не менее, такая же проблема - до сих пор не удается подключиться, к сожалению, – user1670032

Смежные вопросы