2013-11-22 55 views
0

我在C編程方面比較新,特別是在socket編程方面,但我花了很多時間在這個問題上試圖幫助自己,並沒有找到任何東西,我希望有人能夠幫助。因此,這裏的問題(我只寫在那裏我有問題行)存儲在sockadrr_in結構中的類型不被識別

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
#include <time.h> 
#include <sys/time.h> 
#include <errno.h> 
#include <unistd.h> 
#include <sys/socket.h> 
#include <netinet/in.h> 
#include <netinet/tcp.h> 
#include <arpa/inet.h> 
typedef int SOCKET; 

static const int SOCKET_ERROR = -1; 

/*Variables initialisation*/ 
int32_t filtersize1=0; 
int32_t filtersize2=0; 
SOCKET sock; 
unsigned int bytes_sent = 0; 
int success = TRUE; 
int erreur2=0; 
int erreur3=0; 


static char const *DEF_HOST_IP = "132.166.142.227"/* default target host address*/ 
static const unsigned short DEF_HOST_PORT = 15000;   /* default target port */ 
struct sockaddr_in hostinfo; 

/* Store TCP/IP parameters */ 
hostinfo.sin_family = AF_INET; 
hostinfo.sin_addr.s_addr = inet_addr(*DEF_HOST_IP); 
hostinfo.sin_port = htons(DEF_HOST_PORT); 

我編譯時收到錯誤「預期的構造函數,析構函數或類型轉換之前的‘’令牌「,並在我填寫sockadrr_in結構(命名爲hostinfo)的行上我的猜測是代碼不會將sockadrr_in識別爲結構類型,或者不能識別存儲在此結構中的類型,但我已經在另一臺機器上使用過這個代碼,它正在工作。我確切地說,我已經嘗試過將結構設置爲零,而且我也遇到了同樣的問題。如果有人有解決方案,這將真的幫助我,因爲我不知道該怎麼嘗試了。提前致謝。

+2

是函數體(如'main()')還是外部的代碼?如果在外面,這是無效的。 – Nim

+0

不要在標題中添加「解決」之類的內容,而是選擇一個答案作爲接受的答案。如果沒有人適合,寫下你自己的答案並接受。因此我回滾了你最後的編輯。 – alk

回答

1

只有在函數體外部允許聲明。

的線條:

/* Store TCP/IP parameters */ 
hostinfo.sin_family = AF_INET; 
hostinfo.sin_addr.s_addr = inet_addr(*DEF_HOST_IP); 
hostinfo.sin_port = htons(DEF_HOST_PORT); 

不申報,必須把一個函數內部。

+0

這可能是。另一個問題是調用'inet_addr(* DEF_HOST_IP);'當你需要像調用inet_addr(DEF_HOST_IP)時那樣''。 – Guido

+0

好吧,這正是問題所在,它超出了我的功能。非常感謝您幫助我解決問題。 – user1379725

2

您可以通過以下方式初始化結構:

// compiles 
struct sockaddr_in hostinfo = { 
    .sin_family = AF_INET 
}; 

但只要你添加一個函數調用,它將不再起作用,因爲該元素不再是恆定的。對編譯器來說,添加這個函數調用意味着元素不是常量,所以它不知道爲全局對象存儲什麼。

// does not compile 
struct sockaddr_in hostinfo = { 
    .sin_family = AF_INET, 
    .sin_port = htons(DEF_HOST_PORT), 
}; 

此外,你必須在該行缺少分號:

static char const *DEF_HOST_IP = "132.166.142.227" 

都會響起的@ KLAS-lindback說什麼,你應該在某處初始化hostinfo作爲一個功能的一部分。

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
#include <time.h> 
#include <sys/time.h> 
#include <errno.h> 
#include <unistd.h> 
#include <sys/socket.h> 
#include <netinet/in.h> 
#include <netinet/tcp.h> 
#include <arpa/inet.h> 

static char const *DEF_HOST_IP = "132.166.142.227"; /* default target host address*/ 
static const unsigned short DEF_HOST_PORT = 15000; /* default target port */ 
struct sockaddr_in hostinfo; 

void setup_hostinfo() 
{ 
    /* Store TCP/IP parameters */ 
    hostinfo.sin_family  = AF_INET; 
    hostinfo.sin_addr.s_addr = inet_addr(DEF_HOST_IP); 
    hostinfo.sin_port  = htons(DEF_HOST_PORT); 
} 

int main(void) { 

    /* setup our hostinfo */ 
    setup_hostinfo(); 

    return 0; 
} 
相關問題