error: ‘struct in_addr’ has no member named ‘S_un’

junjin456963 2011-07-27 11:19:58
用GCC调试出了 error: ‘struct in_addr’ has no member named ‘S_un’ 。找了MSDN,谷歌,一堆英文试着看了几下,也没找着我把代码列出,各位帮我看下哪里错了,在这先谢谢了

#include <stdio.h>
#include <sys/socket.h>
#include <unistd.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <errno.h>
#include <string.h>
int main(int argc,char *argv[])
{
int server_socket;
int client_socket;
char buffer[512];
pid_t child_id;
int read_count;
int addr_len = sizeof(struct sockaddr_in);
struct sockaddr_in ser_addr,client_addr;
memset(buffer,0,512);
server_socket = socket(AF_INET,SOCK_STREAM,0);
if(server_socket<0)
{
perror("server_socket");
}

ser_addr.sin_family = AF_INET;
ser_addr.sin_port = htons(6666);
ser_addr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");

if(bind(server_socket,(struct sockaddr*)&ser_addr,addr_len)<0)
{
perror("bind:");
}

listen(server_socket,10);
while(1)
{
client_socket = accept(server_socket,(struct sockaddr*)&client_addr,&addr_len);
child_id = fork();
if(child_id == 0)
{
while((read_count = read(client_socket,buffer,512))>0)
{
close(server_socket);
write(client_socket,buffer,read_count);
memset(buffer,0,512);
}

}
else if(child_id > 0)
{
close(client_socket);
}
}

return 0;
}
...全文
2233 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
jiahehao 2011-07-27
  • 打赏
  • 举报
回复
/* Internet address. */
struct in_addr {
__be32 s_addr;
};

上面是内核里的定义。

估计楼主copy代码的时候有问题,呵呵。
justkk 2011-07-27
  • 打赏
  • 举报
回复
ser_addr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
这是从哪儿摘录的

unix系统中通常没有大写的命令或函数或成员
试试
ser_addr.sin_addr.s_addr = inet_addr("127.0.0.1");
junjin456963 2011-07-27
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 justkk 的回复:]

ser_addr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
这是从哪儿摘录的

unix系统中通常没有大写的命令或函数或成员
试试
ser_addr.sin_addr.s_addr = inet_addr("127.0.0.1");
[/Quote]

确实视频里写的是ser_addr.sin_addr = inet_addr("127.0.0.1");
但我发现有错,就从MSDN上找了,,,,,自己改,,,,
junjin456963 2011-07-27
  • 打赏
  • 举报
回复
MSDN上说的
in_addr
Windows CE 5.0
Send Feedback
This structure represents a host by its Internet address.

struct in_addr {
union {
struct { u_char s_b1,s_b2,s_b3,s_b4; } S_un_b;
struct { u_short s_w1,s_w2; } S_un_w;
u_long S_addr;
} S_un;
};
这里的S_un是不是WINDOWS的,而LINUX上不是这个。。。。???
junjin456963 2011-07-27
  • 打赏
  • 举报
回复
确实我现在LINUX下用GCC调,我看播布客里《SOCKET入门编程》视频里讲的一样,按他的代码调试,视频里他用GCC通过,但我用GCC不通过,,,
冰霜icefrost 2011-07-27
  • 打赏
  • 举报
回复
楼主没copy错,你的程序应该是在windows上运行吧,
你是Linux中,还是windows?

winsock.h中有如下定义:
struct in_addr {
union {
struct { u_char s_b1,s_b2,s_b3,s_b4; } S_un_b;
struct { u_short s_w1,s_w2; } S_un_w;
u_long S_addr;
} S_un;
#define s_addr S_un.S_addr
#define s_host S_un.S_un_b.s_b2
#define s_net S_un.S_un_b.s_b1
#define s_imp S_un.S_un_w.s_w2
#define s_impno S_un.S_un_b.s_b4
#define s_lh S_un.S_un_b.s_b3
};
冰霜icefrost 2011-07-27
  • 打赏
  • 举报
回复
改成下面的试试看
ser_addr.sin_addr.s_addr = inet_addr("127.0.0.1");

dongjiawei316 2011-07-27
  • 打赏
  • 举报
回复
错误报警很明白啊!就是说没有S_un这个成员啊!

23,124

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧