-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

这是工具的一部分。

网络.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

头文件中的这一行

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

缺少一个右括号。添加它将修复此错误。编译器因在错误的行上报告与未闭合括号相关的错误而臭名昭著。

于 2012-10-27T03:57:03.260 回答
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 回答