当前位置: 技术问答>linux和unix
socket编程的基础问题。
来源: 互联网 发布时间:2015-07-19
本文导语: 我正在学习linux网络编程,现在碰到一个socket的问题。找了一个例子,代码如下,用gcc编译时老是提示 client.c:50: dereferencing pointer to incomplete type,请问是什么原因?该怎么解决? 1 2 /******客户端...
我正在学习linux网络编程,现在碰到一个socket的问题。找了一个例子,代码如下,用gcc编译时老是提示
client.c:50: dereferencing pointer to incomplete type,请问是什么原因?该怎么解决?
1
2 /******客户端程序******/
3
4 #include
5 #include
6 #include
7 #include
8 #include
9 #include
10
11 int main(int argc, char argv[])
12 {
13 int sockfd;
14 char buffer[1024];
15 struct sockaddr_in server_addr;
16 struct hostent *host;
17 int portnumber, nbytes;
18
19 if(argc!=3)
20 {
21 fprintf(stderr, "Usage:%s hostname portnumberan", argv[0]);
22 exit(1);
23 }
24
25 /**获得主机名**/
26 if((host=gethostbyname(argv[1]))==NULL)
27 {
28 fprintf(stderr, "Gethostname errorn");
29 exit(1);
30 }
31
32 /**获得端口号**/
33 if((portnumber=atoi(argv[2]))h_addr);
51
52 /**客户程序发起连接请求**/
53 if(connect(sockfd, (struct sockaddr*)(&server_addr), sizeof(struct sockaddr))==-1)
54 {
55 fprintf(stderr, "Connect Error:%san", strerror(errno));
56 exit(1);
57 }
58
59 /**连接成功了**/
60 if((nbytes=read(sockfd, buffer, 1024))==-1)
61 {
62 fprintf(stderr, "Read Error:%sn", strerror(errno));
63 exit(1);
64 }
65 buffer[nbytes]='';
66 printf("I have received:%sn",buffer);
67
68 /**结束通讯**/
69 close(sockfd);
70 exit(0);
71 }
client.c:50: dereferencing pointer to incomplete type,请问是什么原因?该怎么解决?
1
2 /******客户端程序******/
3
4 #include
5 #include
6 #include
7 #include
8 #include
9 #include
10
11 int main(int argc, char argv[])
12 {
13 int sockfd;
14 char buffer[1024];
15 struct sockaddr_in server_addr;
16 struct hostent *host;
17 int portnumber, nbytes;
18
19 if(argc!=3)
20 {
21 fprintf(stderr, "Usage:%s hostname portnumberan", argv[0]);
22 exit(1);
23 }
24
25 /**获得主机名**/
26 if((host=gethostbyname(argv[1]))==NULL)
27 {
28 fprintf(stderr, "Gethostname errorn");
29 exit(1);
30 }
31
32 /**获得端口号**/
33 if((portnumber=atoi(argv[2]))h_addr);
51
52 /**客户程序发起连接请求**/
53 if(connect(sockfd, (struct sockaddr*)(&server_addr), sizeof(struct sockaddr))==-1)
54 {
55 fprintf(stderr, "Connect Error:%san", strerror(errno));
56 exit(1);
57 }
58
59 /**连接成功了**/
60 if((nbytes=read(sockfd, buffer, 1024))==-1)
61 {
62 fprintf(stderr, "Read Error:%sn", strerror(errno));
63 exit(1);
64 }
65 buffer[nbytes]='';
66 printf("I have received:%sn",buffer);
67
68 /**结束通讯**/
69 close(sockfd);
70 exit(0);
71 }
|
main声明的argv应该为char *argv[]
同时你include的头文件也缺了一个,把#include 加上!
btw:我已经调试成功了你的代码。
同时你include的头文件也缺了一个,把#include 加上!
btw:我已经调试成功了你的代码。
|
server_addr.sin_addr.s_addr=inet_addr(host->h_addr);
|
try server_addr.sin_addr.s_addr =((struct in_addr *)host->h_addr)->s_addr;
|
楼上的对