-3

network.h と network.c ファイルを作成します。gccでコンパイルすると。奇妙なエラーが表示されます。

gcc -o network.o -c network.h

network.c:14: error: expected ‘;’, ‘,’ or ‘)’ before ‘{’ token

コードはソケットを介してメッセージを送信しようとします。

これがヘッダーファイルです。

ネットワーク.h

#ifndef _NETWORK_H_
#define _NETWORK_H_

int open_tcp(char* host, int port);
int nsend(int sock_fd, char* buffer, int num);
int nrecv(int sock_fd, char* buffer, int num;
int recv_line();
int close(int socket_fd);

#endif

これは器具の部分です。

network.c

#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h> 
#include <stdlib.h>
#include "network.h"

#define BUFFER_SIZE 300000

int open_tcp(char* host, int port)
{
    int sockfd, n;
    struct sockaddr_in serv_addr;
    struct hostent *server;

    sockfd = -1;
    char buffer[BUFFER_SIZE];
    sockfd = socket(AF_INET, SOCK_STREAM, 0);
    if (sockfd < 0) 
        error("ERROR opening socket");
    server = gethostbyname(host);
    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(port);
    if (connect(sockfd,(struct sockaddr *) &serv_addr,sizeof(serv_addr)) < 0) 
        error("ERROR connecting");
    return sockfd;
}

ご協力ありがとうございました。

4

2 に答える 2

2

あなたがそれが言うエラーを読むために少し時間を与えるならば、

network.c:14: error: expected ‘;’, ‘,’ or ‘)’ before ‘{’ token

#includeここで、ファイルが含まれ、ファイルの内容を現在のファイルに入れることがわかっている場合は、行を数えるだけで(この場合はファイルが小さいため)、の6行目network.hに到達します。問題があります、すなわちこの行

int nrecv(int sock_fd, char* buffer, int num;

これが理解を深め、正確なエラーの場所を見つけることでそのようなエラーを解決するのに役立つことを願っています。

于 2012-10-27T04:02:39.553 に答える
2

ヘッダーファイルのこの行

int nrecv(int sock_fd, char* buffer, int num;

閉じ括弧がありません。追加すると、このエラーが修正されます。コンパイラは、間違った行の閉じていない括弧に関連するエラーを報告することで有名です。

于 2012-10-27T03:57:03.260 に答える